From 340cd7be3a4bc9f78644888d6194d21bd222c946 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Thu, 10 Aug 2006 18:12:18 +0000 Subject: [PATCH] * socket_getsockopt() now supports all boolean SO_* options as well. * socket_listen() now sets the SO_ACCEPTCONN flag if it succeeds. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18476 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../kernel/network/stack/net_socket.cpp | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/add-ons/kernel/network/stack/net_socket.cpp b/src/add-ons/kernel/network/stack/net_socket.cpp index a5745ec650..f9d456c7a1 100644 --- a/src/add-ons/kernel/network/stack/net_socket.cpp +++ b/src/add-ons/kernel/network/stack/net_socket.cpp @@ -290,6 +290,22 @@ socket_getsockopt(net_socket *socket, int level, int option, void *value, return B_OK; } + case SO_ACCEPTCONN: + case SO_BROADCAST: + case SO_DEBUG: + case SO_DONTROUTE: + case SO_KEEPALIVE: + case SO_OOBINLINE: + case SO_REUSEADDR: + case SO_REUSEPORT: + case SO_USELOOPBACK: + { + int32 *_set = (int32 *)value; + *_set = (socket->options & option) != 0; + *_length = sizeof(int32); + return B_OK; + } + default: break; } @@ -301,7 +317,11 @@ socket_getsockopt(net_socket *socket, int level, int option, void *value, int socket_listen(net_socket *socket, int backlog) { - return socket->first_info->listen(socket->first_protocol, backlog); + status_t status = socket->first_info->listen(socket->first_protocol, backlog); + if (status == B_OK) + socket->options |= SO_ACCEPTCONN; + + return status; }