public SOCKET Bind( IEndpointConfiguration configuration ) { SOCKET socket = INVALID_SOCKET; "Binding to endpoint {0}:{1}" .ToDebug<ISocketServer>( configuration.BindTo ?? "0.0.0.0", configuration.Port ); try { WSAPROTOCOL_INFO info = new WSAPROTOCOL_INFO(); Native.WSASocket( (int) AddressFamily.InterNetworkv4, (int) SocketType.Stream, (int) ProtocolType.Tcp, out info, 0, (int) SocketFlags.Overlapped ); var address = Native.inet_addr( configuration.AnyInterface ? "0.0.0.0" : configuration.BindTo ); var port = Native.htons( (ushort) configuration.Port ); sockaddr_in socket_address = new sockaddr_in(); socket_address.sin_addr.S_addr = address; socket_address.sin_port = port; socket_address.sin_family = (short) AddressFamily.InterNetworkv4; Native.bind( socket, &socket_address, sizeof ( sockaddr_in ) ); Native.listen( socket, 10000 ); return socket; } catch (Exception e) { "Binding to endpoint {0}:{1} FAILED." .ToDebug<ISocketServer>( configuration.BindTo ?? "0.0.0.0", configuration.Port ); } return socket; }
public static extern sbyte* inet_ntoa(sockaddr_in.in_addr _in);
public static extern int connect(SOCKET s, sockaddr_in* addr, int addrsize);
public static extern int getpeername(SOCKET s, sockaddr_in* addr, int* addrsize);
public static extern int bind(SOCKET s, sockaddr_in* addr, int addrsize);