VMK_ReturnStatus LogFS_NetCreateAcceptSocket(Net_Socket * acceptSocketOut) { VMK_ReturnStatus status; sockaddr_in_bsd myAddr; int optval; Net_Socket acceptSocket; Net_SetSockVal(acceptSocketOut, NULL); status = Net_CreateSocket(PF_INET, SOCK_STREAM, IPPROTO_TCP, &acceptSocket, DEFAULT_STACK); if (status != VMK_OK) { if (status == VMK_NOT_SUPPORTED) { printf("Can't create accept socket. Is the TCP/IP module loaded?"); } else { printf("Can't create accept socket: %s", VMK_ReturnStatusToString(status)); } return status; } memset(&myAddr, 0, sizeof(myAddr)); myAddr.sin_len = sizeof(myAddr); myAddr.sin_family = AF_INET; myAddr.sin_port = htons(8090); optval = 1; status = Net_SetSockOpt(acceptSocket, SOL_SOCKET, SO_REUSEPORT, &optval, sizeof optval, DEFAULT_STACK); if (status != VMK_OK) { printf("Reuse port sockopt failed: %s", VMK_ReturnStatusToString(status)); Net_CloseSocket(acceptSocket, DEFAULT_STACK); return status; } status = Net_Bind(acceptSocket, (struct sockaddr *)&myAddr, sizeof myAddr, DEFAULT_STACK); if (status != VMK_OK) { printf("Bind failed: %s", VMK_ReturnStatusToString(status)); Net_CloseSocket(acceptSocket, DEFAULT_STACK); return status; } status = Net_Listen(acceptSocket, 5, DEFAULT_STACK); if (status != VMK_OK) { printf("Error trying to listen: %s", VMK_ReturnStatusToString(status)); Net_CloseSocket(acceptSocket, DEFAULT_STACK); return status; } *acceptSocketOut = acceptSocket; return VMK_OK; }
/* * @brief */ void Net_Config(net_src_t source, _Bool up) { uint16_t p = 0; if (source == NS_SERVER) { p = (uint16_t) net_port->integer; } if (up) { // open the socket if (!ip_sockets[source]) ip_sockets[source] = Net_Socket(net_ip->string, p); return; } // or close it if (ip_sockets[source]) Net_CloseSocket(ip_sockets[source]); ip_sockets[source] = 0; }