summaryrefslogtreecommitdiff
path: root/src/socket/bsd_common.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/socket/bsd_common.c')
-rw-r--r--src/socket/bsd_common.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/socket/bsd_common.c b/src/socket/bsd_common.c
new file mode 100644
index 0000000..af0a9b6
--- /dev/null
+++ b/src/socket/bsd_common.c
@@ -0,0 +1,40 @@
+#ifndef NAUNET_ON_WINDOWS
+#include <netinet/tcp.h>
+#include <netinet/in.h>
+#endif
+
+#include "socket.h"
+
+void nn_socket_set_nodelay(struct nn_socket *sock, s32 nodelay)
+{
+ al_assert(sock->type == NNWT_SOCKET_TCP);
+ setsockopt(sock->fd, IPPROTO_TCP, TCP_NODELAY, (char *)&nodelay, sizeof(nodelay));
+}
+
+u32 nn_socket_get_send_buf(struct nn_socket *sock)
+{
+ u32 send_queue_size;
+ socklen_t optlen = sizeof(send_queue_size);
+ getsockopt(sock->fd, SOL_SOCKET, SO_SNDBUF, (char *)&send_queue_size, &optlen);
+ return send_queue_size;
+}
+
+void nn_socket_set_send_buf(struct nn_socket *sock, u32 sndbuf)
+{
+ u32 send_queue_size = sndbuf;
+ setsockopt(sock->fd, SOL_SOCKET, SO_SNDBUF, (char *)&send_queue_size, sizeof(send_queue_size));
+}
+
+u32 nn_socket_get_recv_buf(struct nn_socket *sock)
+{
+ u32 receive_queue_size;
+ socklen_t optlen = sizeof(receive_queue_size);
+ getsockopt(sock->fd, SOL_SOCKET, SO_RCVBUF, (char *)&receive_queue_size, &optlen);
+ return receive_queue_size;
+}
+
+void nn_socket_set_recv_buf(struct nn_socket *sock, u32 rcvbuf)
+{
+ u32 receive_queue_size = rcvbuf;
+ setsockopt(sock->fd, SOL_SOCKET, SO_RCVBUF, (char *)&receive_queue_size, sizeof(receive_queue_size));
+}