int PacketPeerUDPWinsock::_get_socket() { if (sockfd != -1) return sockfd; sockfd = _socket_create(ip_type, SOCK_DGRAM, IPPROTO_UDP); return sockfd; }
int PacketPeerUDPWinsock::_get_socket() { ERR_FAIL_COND_V(sock_type == IP::TYPE_NONE, -1); if (sockfd != -1) return sockfd; sockfd = _socket_create(sock_type, SOCK_DGRAM, IPPROTO_UDP); return sockfd; }
Error TCPServerPosix::listen(uint16_t p_port, const IP_Address p_bind_address) { ERR_FAIL_COND_V(listen_sockfd != -1, ERR_ALREADY_IN_USE); ERR_FAIL_COND_V(!p_bind_address.is_valid() && !p_bind_address.is_wildcard(), ERR_INVALID_PARAMETER); int sockfd; #ifdef __OpenBSD__ sock_type = IP::TYPE_IPV4; // OpenBSD does not support dual stacking, fallback to IPv4 only. #else sock_type = IP::TYPE_ANY; #endif // If the bind address is valid use its type as the socket type if (p_bind_address.is_valid()) sock_type = p_bind_address.is_ipv4() ? IP::TYPE_IPV4 : IP::TYPE_IPV6; sockfd = _socket_create(sock_type, SOCK_STREAM, IPPROTO_TCP); ERR_FAIL_COND_V(sockfd == -1, FAILED); #ifndef NO_FCNTL fcntl(sockfd, F_SETFL, O_NONBLOCK); #else int bval = 1; ioctl(sockfd, FIONBIO, &bval); #endif int reuse = 1; if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (char *)&reuse, sizeof(reuse)) < 0) { WARN_PRINT("REUSEADDR failed!") } struct sockaddr_storage addr; size_t addr_size = _set_listen_sockaddr(&addr, p_port, sock_type, p_bind_address); if (bind(sockfd, (struct sockaddr *)&addr, addr_size) != -1) { if (::listen(sockfd, 1) == -1) { close(sockfd); ERR_FAIL_V(FAILED); }; } else { return ERR_ALREADY_IN_USE; }; if (listen_sockfd != -1) { stop(); }; listen_sockfd = sockfd; return OK; };
Error StreamPeerWinsock::connect_to_host(const IP_Address &p_host, uint16_t p_port) { ERR_FAIL_COND_V(!p_host.is_valid(), ERR_INVALID_PARAMETER); sock_type = p_host.is_ipv4() ? IP::TYPE_IPV4 : IP::TYPE_IPV6; sockfd = _socket_create(sock_type, SOCK_STREAM, IPPROTO_TCP); if (sockfd == INVALID_SOCKET) { ERR_PRINT("Socket creation failed!"); disconnect_from_host(); //perror("socket"); return FAILED; }; unsigned long par = 1; if (ioctlsocket(sockfd, FIONBIO, &par)) { perror("setting non-block mode"); disconnect_from_host(); return FAILED; }; struct sockaddr_storage their_addr; size_t addr_size = _set_sockaddr(&their_addr, p_host, p_port, sock_type); if (::connect(sockfd, (struct sockaddr *)&their_addr, addr_size) == SOCKET_ERROR) { if (WSAGetLastError() != WSAEWOULDBLOCK) { ERR_PRINT("Connection to remote host failed!"); disconnect_from_host(); return FAILED; }; status = STATUS_CONNECTING; } else { status = STATUS_CONNECTED; }; peer_host = p_host; peer_port = p_port; return OK; };
int __xnet_socket(int family, int type, int protocol) { return (_socket_create(family, type, protocol, SOV_XPG4_2)); }
int _socket_svr4(int family, int type, int protocol) { return (_socket_create(family, type, protocol, SOV_SOCKSTREAM)); }
/* * Used by the BCP library. */ int _socket_bsd(int family, int type, int protocol) { return (_socket_create(family, type, protocol, SOV_SOCKBSD)); }
int _socket(int family, int type, int protocol) { return (_socket_create(family, type, protocol, SOV_DEFAULT)); }