1.txt
text/plain
#include <winsock.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#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;
}