mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-10-22 00:22:57 -05:00
getsockopt and setsockopt on a libkernel socket knew four SOL_SOCKET options (SO_REUSEADDR, SO_BROADCAST, SO_SNDBUF, SO_RCVBUF) and failed every other one with ENOPROTOOPT. The Mound's EOS SDK reads SO_ERROR on two of its sockets after a connect, which therefore always failed. The SOL_SOCKET options now follow FreeBSD 11.4 sosetopt and sogetopt: - SO_ERROR returns the pending error of the socket as a FreeBSD errno and reports it once (Winsock does not clear it on read, so the library does). - SO_TYPE, SO_ACCEPTCONN, SO_KEEPALIVE, SO_DONTROUTE, SO_OOBINLINE and SO_LINGER are read from and set on the host socket; the boolean options read back as their own bit, as FreeBSD returns so_options & option. - SO_DEBUG, SO_USELOOPBACK, SO_REUSEPORT, SO_TIMESTAMP and SO_NOSIGPIPE stay ENOPROTOOPT until a title needs one. - A value is read from its first int and fails with EINVAL when shorter, a getsockopt buffer is filled up to its length (sooptcopyin, sooptcopyout), SO_SNDBUF and SO_RCVBUF below 1 fail with EINVAL, and SO_LINGER outside 0..65535 seconds fails with EDOM. A connect on a non-blocking socket now fails with EINPROGRESS on Windows too (it was EWOULDBLOCK, which a title waiting for the connection does not expect). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>