#include #include #include #include #define SOCK_ERRNO (WSAGetLastError()) #define SOCK_STRERROR my_sock_strerror static int netmsg_loaded=0; const char* my_sock_strerror(unsigned long eno){ static char buf[512]; // i know, not threadsafe static HMODULE netmsg=0; if (!netmsg_loaded){ netmsg_loaded=1; netmsg=LoadLibraryEx("netmsg.dll",0,LOAD_LIBRARY_AS_DATAFILE); // ^ never freed (doesn't matter) } unsigned long flags = FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS; if (netmsg) flags |= FORMAT_MESSAGE_FROM_HMODULE; if (!FormatMessage( flags, netmsg,eno, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), buf,sizeof(buf)-1, 0 )){ sprintf(buf,"Unknown socket error(%u)",eno); } buf[sizeof(buf)-1]='\0'; return buf; } int main(int argc, char* argv[]) { WSADATA wsa_data; struct sockaddr_in addr; int sock, r; WSAStartup (0x0101, &wsa_data); sock = socket(PF_INET,SOCK_STREAM,0); addr.sin_family = AF_INET; addr.sin_addr.s_addr = inet_addr("10.10.10.3"); addr.sin_port= htons(1234); r = connect (sock,(struct sockaddr*)&addr,sizeof(struct sockaddr_in)); if (r==-1) { int eno = SOCK_ERRNO; printf("socket error(%u):%s\n",eno,SOCK_STRERROR(eno)); } WSACleanup(); return 0; }