//////////////////////////////////////////////////////////////////////////
int ConnectServer(void){
struct sockaddr_in Host;
struct hostent FAR *Host_ptr;
SOCKET Socket;
WORD wMajorVersion, wMinorVersion;
WORD VersionReqd;
LPWSADATA lpmyWSAData;
int Return;
int PortNmbr=1595;
wMajorVersion = MAJOR_VERSION;
wMinorVersion = MINOR_VERSION;
VersionReqd = WSA_MAKEWORD(wMajorVersion, wMinorVersion);
lpmyWSAData = (LPWSADATA) _calloc(1, sizeof(WSADATA));
Return = WSAStartup(VersionReqd, lpmyWSAData);
if(Return){
Return = WSAGetLastError();
return (Return);
}
if((Socket = socket(PF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET){
Return = WSAGetLastError();
return (Return);
}
Host.sin_port = htons((u_int)PortNmbr);
if((Host_ptr = gethostbyname("EDISON")) == NULL)
return WSAGetLastError();
bcopy(Host_ptr->h_addr, &Host.sin_addr, Host_ptr->h_length);
Return = connect(Socket, (struct sockaddr FAR *)&Host, sizeof(Host));
if(Return){
Return = WSAGetLastError();
return (Return);
}
return(0);
}
char *_calloc(unsigned nelem, unsigned elsize){
HANDLE hMem;
PSTR ptr;
unsigned size = nelem * elsize;
if((hMem = LocalAlloc(LPTR, size)) == NULL) return (char *)0;
if((ptr = LocalLock(hMem)) == NULL){
LocalFree(hMem);
return (char *)0;
}
return (char *)ptr;
}
#define MAJOR_VERSION 1
#define MINOR_VERSION 2
#define bcopy(a, b, c) _fmemcpy(b, a, c)
#define WSA_MAKEWORD(x, y) ((y) * 256 + (x))
Youngsang, Hwang
CIM Team, Asiana Airlines
SEOUL, COREA
You need to do a bind() after creating the socket and before calling
connect. Something like:
sin.sin_family := AF_INET;
sin.sin_addr.s_addr := 0; (* host IP address gets supplied by winsock *)
sin.sin_port := 0; (* winsock supplies local port number *)
err := bind (s, addr(sockaddr(sin)), sizeof(sin));
or whatever it is in the funny language you are using.
------------------------------------------------
Bob Cousins, Sirius Cybernetics.
Christmas Card for Windows available from ftp.demon.co.uk:
/pub/ibmpc/windows/xmascard/xmascard.zip.