]> Chaos Git - corbenik/ctrulib.git/commitdiff
Tested all the send/recv flags and the SOL_SOCKET options
authorMichael Theall <pigman46@gmail.com>
Thu, 21 Jan 2016 00:10:48 +0000 (18:10 -0600)
committerMichael Theall <pigman46@gmail.com>
Thu, 21 Jan 2016 00:10:48 +0000 (18:10 -0600)
libctru/include/sys/socket.h

index c8ba3ab880552690aca7785f293c839214108247..f1171533f293acf8979aedbad130ea69a56d8af0 100644 (file)
@@ -3,67 +3,57 @@
 #include <stdint.h>
 #include <sys/time.h>
 
-#define SOL_SOCKET     0xFFFF
+#define SOL_SOCKET      0xFFFF
 
-#define PF_UNSPEC      0
-#define PF_INET                2
-#define PF_INET6       23
+#define PF_UNSPEC       0
+#define PF_INET         2
+#define PF_INET6        23
 
-#define AF_UNSPEC      PF_UNSPEC
-#define AF_INET                PF_INET
-#define AF_INET6       PF_INET6
+#define AF_UNSPEC       PF_UNSPEC
+#define AF_INET         PF_INET
+#define AF_INET6        PF_INET6
 
-#define SOCK_STREAM    1
-#define SOCK_DGRAM     2
+#define SOCK_STREAM     1
+#define SOCK_DGRAM      2
 
-#define MSG_CTRUNC     0x01000000
-#define MSG_DONTROUTE  0x02000000
-#define MSG_EOR                0x04000000
-#define MSG_OOB                0x08000000
-#define MSG_PEEK       0x10000000
-#define MSG_TRUNC      0x20000000
-#define MSG_WAITALL    0x40000000
+// any flags > 0x4 causes send/recv to return EOPNOTSUPP
+#define MSG_OOB         0x0001
+#define MSG_PEEK        0x0002
+#define MSG_DONTWAIT    0x0004
+#define MSG_DONTROUTE   0x0000  // ???
+#define MSG_WAITALL     0x0000  // ???
+#define MSG_MORE        0x0000  // ???
+#define MSG_NOSIGNAL    0x0000  // there are no signals
 
-#define SHUT_RD                0
-#define SHUT_WR                1
-#define SHUT_RDWR      2
-
-//#define SO_DEBUG      0x0001   // not working
-//#define SO_ACCEPTCONN 0x0002   // not working
-#define SO_REUSEADDR    0x0004
-//#define SO_KEEPALIVE  0x0008   // not working
-//#define SO_DONTROUTE  0x0010   // not working
-//#define SO_BROADCAST  0x0020   // not working
-#define SO_USELOOPBACK  0x0040
-#define SO_LINGER       0x0080
-#define SO_OOBINLINE    0x0100
-//#define SO_REUSEPORT  0x0200   // not working
+#define SHUT_RD         0
+#define SHUT_WR         1
+#define SHUT_RDWR       2
 
 /*
- * Additional options, not kept in so_options.
+ * SOL_SOCKET options
  */
-#define SO_SNDBUF       0x1001      /* send buffer size */
-#define SO_RCVBUF       0x1002      /* receive buffer size */
-#define SO_SNDLOWAT     0x1003      /* send low-water mark */
-#define SO_RCVLOWAT     0x1004      /* receive low-water mark */
-//#define SO_SNDTIMEO   0x1005      /* send timeout */     // not working
-//#define SO_RCVTIMEO   0x1006      /* receive timeout */  // not working
-
-#define SO_TYPE         0x1008      /* get socket type */
-#define SO_ERROR        0x1009      /* get error status and clear */
+#define SO_REUSEADDR    0x0004      // reuse address
+#define SO_LINGER       0x0080      // linger (no effect?)
+#define SO_OOBINLINE    0x0100      // out-of-band data inline (no effect?)
+#define SO_SNDBUF       0x1001      // send buffer size
+#define SO_RCVBUF       0x1002      // receive buffer size
+#define SO_SNDLOWAT     0x1003      // send low-water mark (no effect?)
+#define SO_RCVLOWAT     0x1004      // receive low-water mark
+#define SO_TYPE         0x1008      // get socket type
+#define SO_ERROR        0x1009      // get socket error
 
 typedef uint32_t socklen_t;
 typedef uint16_t sa_family_t;
 
 struct sockaddr {
-       sa_family_t     sa_family;
-       char            sa_data[];
+       sa_family_t sa_family;
+       char        sa_data[];
 };
 
 // biggest size on 3ds is 0x1C (sockaddr_in6)
 struct sockaddr_storage {
-       sa_family_t     ss_family;
-       char            __ss_padding[26];
+       sa_family_t ss_family;
+       char        __ss_padding[26];
 };
 
 struct linger {
@@ -75,22 +65,22 @@ struct linger {
 extern "C" {
 #endif
 
-       int     accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
-       int     bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
-       int     closesocket(int sockfd);
-       int     connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
-       int     getpeername(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
-       int     getsockname(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
-       int     getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);
-       int     listen(int sockfd, int backlog);
-       ssize_t recv(int sockfd, void *buf, size_t len, int flags);
-       ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);
-       ssize_t send(int sockfd, const void *buf, size_t len, int flags);
-       ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);
-       int     setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);
-       int     shutdown(int sockfd, int how);
-       int     socket(int domain, int type, int protocol);
-       int     sockatmark(int sockfd);
+       int     accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
+       int     bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
+       int     closesocket(int sockfd);
+       int     connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
+       int     getpeername(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
+       int     getsockname(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
+       int     getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);
+       int     listen(int sockfd, int backlog);
+       ssize_t recv(int sockfd, void *buf, size_t len, int flags);
+       ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);
+       ssize_t send(int sockfd, const void *buf, size_t len, int flags);
+       ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);
+       int     setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);
+       int     shutdown(int sockfd, int how);
+       int     socket(int domain, int type, int protocol);
+       int     sockatmark(int sockfd);
 
 #ifdef __cplusplus
 }