int anetUnixServer(char *err, char *path, mode_t perm, int backlog) { int s; struct sockaddr_un sa; if ((s = anetCreateSocket(err,AF_LOCAL)) == ANET_ERR) return ANET_ERR; memset(&sa,0,sizeof(sa)); sa.sun_family = AF_LOCAL; strncpy(sa.sun_path,path,sizeof(sa.sun_path)-1); if (anetListen(err,s,(struct sockaddr*)&sa,sizeof(sa),backlog) == ANET_ERR) return ANET_ERR; if (perm) chmod(sa.sun_path, perm); return s; }
int anetTcpServer(char *err, int port, char *bindaddr) { int s; int y = 1; int n = 0; struct sockaddr_in sa; if ((s = anetCreateSocket(err,AF_INET)) == ANET_ERR) return ANET_ERR; /* Override for SO_REUSEADDR for windows server socks */ if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &n, sizeof(n)) == SOCKET_ERROR) { errno = WSAGetLastError(); anetSetError(err, "setsockopt SO_REUSEADDR: %d\n", errno); return ANET_ERR; } if (setsockopt(s, SOL_SOCKET, SO_EXCLUSIVEADDRUSE, (char *) &y, sizeof(y)) == SOCKET_ERROR) { errno = WSAGetLastError(); anetSetError(err, "setsockopt SO_EXCLUSIVEADDRUSE: %d\n", errno); return ANET_ERR; } memset(&sa,0,sizeof(sa)); sa.sin_family = AF_INET; sa.sin_port = htons(port); sa.sin_addr.s_addr = htonl(INADDR_ANY); if (bindaddr) { unsigned long inAddress; inAddress = inet_addr(bindaddr); if (inAddress == INADDR_NONE || inAddress == INADDR_ANY) { anetSetError(err, "Invalid bind address\n"); aeWinCloseSocket((SOCKET)s); return ANET_ERR; } else { sa.sin_addr.s_addr = inAddress; }; } if (anetListen(err,s,(struct sockaddr*)&sa,sizeof(sa)) == ANET_ERR) return ANET_ERR; return s; }
int anetTcpServer(char *err, int port, char *bindaddr) { int s; struct sockaddr_in sa; if ((s = anetCreateSocket(err,AF_INET)) == ANET_ERR) return ANET_ERR; memset(&sa,0,sizeof(sa)); sa.sin_family = AF_INET; sa.sin_port = htons((uint16_t)port); sa.sin_addr.s_addr = htonl(INADDR_ANY); if (bindaddr && inet_aton(bindaddr, (void*)&sa.sin_addr) == 0) { anetSetError(err, "invalid bind address"); close(s); return ANET_ERR; } if (anetListen(err,s,(struct sockaddr*)&sa,sizeof(sa)) == ANET_ERR) return ANET_ERR; return s; }
int kr_net_tcp_server(char *err, int port, char *bindaddr) { int s; struct sockaddr_in sa; if ((s = anetCreateSocket(err,AF_INET)) == KR_NET_ERR) return KR_NET_ERR; memset(&sa,0,sizeof(sa)); sa.sin_family = AF_INET; sa.sin_port = htons(port); sa.sin_addr.s_addr = htonl(INADDR_ANY); if (bindaddr && inet_aton(bindaddr, &sa.sin_addr) == 0) { kr_net_set_error(err, "invalid bind address"); close(s); return KR_NET_ERR; } if (anetListen(err,s,(struct sockaddr*)&sa,sizeof(sa)) == KR_NET_ERR) return KR_NET_ERR; return s; }
static int anetTcpGenericConnect(char *err, char *addr, int port, int flags) { int s; struct sockaddr_in sa; unsigned long inAddress; if ((s = anetCreateSocket(err,AF_INET)) == ANET_ERR) return ANET_ERR; sa.sin_family = AF_INET; sa.sin_port = htons((u_short)port); inAddress = inet_addr(addr); if (inAddress == INADDR_NONE || inAddress == INADDR_ANY) { struct hostent *he; he = gethostbyname(addr); if (he == NULL) { anetSetError(err, "can't resolve: %s\n", addr); closesocket(s); return ANET_ERR; } memcpy(&sa.sin_addr, he->h_addr, sizeof(struct in_addr)); } else { sa.sin_addr.s_addr = inAddress; } if (aeWinSocketConnect(s, (struct sockaddr*)&sa, sizeof(sa)) == SOCKET_ERROR) { if ((errno == WSAEWOULDBLOCK || errno == WSA_IO_PENDING)) errno = EINPROGRESS; if (errno == EINPROGRESS && flags & ANET_CONNECT_NONBLOCK) { return s; } anetSetError(err, "connect: %d\n", errno); closesocket(s); return ANET_ERR; } return s; }
static int anetTcpGenericConnect(char *err, char *addr, int port, int flags) { int rfd; SOCKADDR_STORAGE ss; ParseStorageAddress(addr, port, &ss); if ((rfd = anetCreateSocket(err,ss.ss_family)) == ANET_ERR) { return ANET_ERR; } if (aeWinSocketConnect(rfd, &ss ) == SOCKET_ERROR) { if ((errno == WSAEWOULDBLOCK || errno == WSA_IO_PENDING)) errno = EINPROGRESS; if (errno == EINPROGRESS && flags & ANET_CONNECT_NONBLOCK) { return rfd; } anetSetError(err, "connect: %d\n", errno); close(rfd); return ANET_ERR; } return rfd; }
static int anetTcpGenericConnect(char *err, char *addr, int port, int flags) { int s; struct sockaddr_in sa; if ((s = anetCreateSocket(err,AF_INET)) == ANET_ERR) return ANET_ERR; sa.sin_family = AF_INET; sa.sin_port = htons(port); if (inet_aton(addr, &sa.sin_addr) == 0) { struct hostent *he; he = gethostbyname(addr); if (he == NULL) { anetSetError(err, "can't resolve: %s", addr); close(s); return ANET_ERR; } memcpy(&sa.sin_addr, he->h_addr, sizeof(struct in_addr)); } if (flags & ANET_CONNECT_NONBLOCK) { if (anetNonBlock(err,s) != ANET_OK) return ANET_ERR; } if (connect(s, (struct sockaddr*)&sa, sizeof(sa)) == -1) { if (errno == EINPROGRESS && flags & ANET_CONNECT_NONBLOCK) return s; anetSetError(err, "connect: %s", strerror(errno)); close(s); return ANET_ERR; } return s; }
int anetUnixServer(char *err, char *path, mode_t perm) { #ifdef _WIN32 ANET_NOTUSED(err); ANET_NOTUSED(path); ANET_NOTUSED(perm); return ANET_ERR; #else int s; struct sockaddr_un sa; if ((s = anetCreateSocket(err,AF_LOCAL)) == ANET_ERR) return ANET_ERR; memset(&sa,0,sizeof(sa)); sa.sun_family = AF_LOCAL; strncpy(sa.sun_path,path,sizeof(sa.sun_path)-1); if (anetListen(err,s,(struct sockaddr*)&sa,sizeof(sa)) == ANET_ERR) return ANET_ERR; if (perm) chmod(sa.sun_path, perm); return s; #endif }