problem with sockets under win32; premature connection termination
    Regan Heath 
    regan at netmail.co.nz
       
    Sat May 12 09:48:04 PDT 2007
    
    
  
Still stumped I tried C this time with the same results.
----------
#include <winsock2.h>
#include <stdio.h>
#include <stdlib.h>
#include <process.h>
#define ISEOL(c) (c == '\r' || c == '\n')
void print_error()
{
	char bf[1000];
	int n,i;
	n = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,
			NULL,
			WSAGetLastError(),
			LANG_USER_DEFAULT,  //MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
			bf,
			1000,
			NULL);
	for(; n > 0 && ISEOL(bf[n-1]); n--) bf[n-1] = '\0';
	for(i = n; i >= 0; i--)
	{
		if (!ISEOL(bf[i])) continue;
		if (bf[i] == '\n') bf[i] = ' ';
		if (bf[i] == '\r') memmove(&bf[i], &bf[i+1], n-i);
	}
	printf("ERROR: %s\n",bf);
}
void init()
{
	WSADATA wd;
	if (WSAStartup(0x2020, &wd)) {
		print_error();
		exit(1);
	}
}
void main(int argc, char* args[])
{
	SOCKET l, request;
	SOCKADDR_IN sin;
	unsigned long num = 0;
	int size;
	init();
	sin.sin_addr.s_addr = inet_addr("127.0.0.1");
	sin.sin_port = htons(atoi(args[1]));
	sin.sin_family = AF_INET;
	printf("%s:%d\n",inet_ntoa(sin.sin_addr),ntohs(sin.sin_port));
	l = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	printf("%d\n",l);
	printf("%d\n",ioctlsocket(l, FIONBIO, &num));
	printf("%d\n",bind(l, (SOCKADDR*)&sin, sizeof(sin)));
	printf("%d\n",listen(l, SOMAXCONN));
	request = accept(l, NULL, NULL);
	size = sizeof(sin);
	getsockname(request, (SOCKADDR*)&sin, &size);
	printf("%s:%d\n",inet_ntoa(sin.sin_addr),ntohs(sin.sin_port));
	printf("%d\n",request);
	printf("%d\n",ioctlsocket(request, FIONBIO, &num));
	printf("%d\n",send(request,"TEST\r\n",6,0));
	Sleep(5000);
	printf("%d\n",shutdown(request, SD_BOTH));
	printf("%d\n",closesocket(request));
	printf("%d\n",closesocket(l));
}
-----------
Compile with:
  dmc bug.c wsock32.lib
Run as:
  bug 80
Telnet with:
  telnet 127.0.0.1 80
Results:
127.0.0.1:80
924
0
0
0
127.0.0.1:80
916
0
6
0
0
0
Telnet window connects and closes, no data is seen.
Odd.
Regan Heath
    
    
More information about the Digitalmars-d
mailing list