`
zhangyafei_kimi
  • 浏览: 261691 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Linux和WIndows都不支持自连接

阅读更多
Cygwin下结果:
connect() 127
Transport endpoint is already connected

VC8下结果:
connect() 10022
No error

Linux 2.6.27下结果:
connect() 106
Transport endpoint is already connected



/*
作者:张亚霏
2008-12-09早
*/



#if defined WIN32 || defined _WIN32


#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")

int init_net()
{
	WSADATA wsa_data;
	return 0 != WSAStartup(MAKEWORD(2,2), &wsa_data);
}

void uninit_net()
{
	WSACleanup();
}

int close_socket(SOCKET s)
{
	return closesocket(s);
}

int get_last_error()
{
	return WSAGetLastError();
}
#else

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <netdb.h>
#include <errno.h>

int init_net()
{
	return 1;
}

void uninit_net()
{
}


typedef int SOCKET;

int close_socket(SOCKET s)
{
	return close(s);
}

int get_last_error()
{
	return errno;
}
#endif



#define BUFFER_SIZE 1024
#define DEST_ADDRESS "127.0.0.1"
#define DEST_PORT 27015//1037


int main()
{
	int recv_buf_size = 1024;
	SOCKET send_socket;
	struct sockaddr_in recv_addr;
	char send_buf[BUFFER_SIZE];
	char recv_buf[BUFFER_SIZE];
	int ret;

	fd_set read_set;
	struct timeval time_out;

	init_net();

	send_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	
	recv_addr.sin_family = AF_INET;
	recv_addr.sin_port = htons(DEST_PORT);
	recv_addr.sin_addr.s_addr = inet_addr(DEST_ADDRESS);
	
	ret = bind(send_socket, (struct sockaddr*) &recv_addr, sizeof(recv_addr));
	if(ret == -1)
	{
		printf("bind() %d\n", get_last_error());
		perror(NULL);
	}
	
	ret = listen(send_socket, 5);
	if(ret == -1)
	{
		printf("listen() %d\n", get_last_error());
		perror(NULL);
	}
	

	recv_addr.sin_family = AF_INET;
	recv_addr.sin_port = htons(DEST_PORT);
	recv_addr.sin_addr.s_addr = inet_addr(DEST_ADDRESS);
	
	ret = connect(send_socket, (struct sockaddr*) &recv_addr, sizeof(recv_addr));
	if(ret == -1)
	{
		printf("connect() %d\n", get_last_error());
		perror(NULL);
	}

	close_socket(send_socket);
	uninit_net();
	return 0;
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics