您的位置:首页 > 其它

跨平台socket 简单实现

2010-06-26 04:04 211 查看
header

代码

int socket_num;
int conns = 0;
char buf[512];
int new_fd;
fd_set fdsr;
unsigned int fd_A[5];
memset(fd_A, 0, sizeof(fd_A));

socket_init();

socket_num = socket_create_acceptor(14001);

while(!shutdown){
FD_ZERO( &fdsr );
FD_SET((u_int)socket_num,&fdsr);

for (int i = 0; i < 5; i++)
{
if (fd_A[i] != 0)
FD_SET(fd_A[i], &fdsr);
}

int result = select( FD_SETSIZE, &fdsr, 0, 0, 0);

if ( result < 0 )
break;
else if (result == 0)
continue;

// check every fd in the set
for (int i = 0; i < conns; i++)
{
if (FD_ISSET(fd_A[i], &fdsr))
{
int ret = recv(fd_A[i], buf, sizeof(buf), 0);
if (ret <= 0)
{
socket_close(fd_A[i]);
FD_CLR(fd_A[i], &fdsr);
fd_A[i] = 0;
}
else
{
//handle message
}
}
}
if (FD_ISSET(socket_num, &fdsr))
{
//handle new connection
new_fd = socket_accept(socket_num);
if (new_fd <= 0)
continue;
if (conns < 5)
fd_A[conns++] = new_fd;
else
socket_close(new_fd);
}

}
for (int i = 0; i < 5; i++)
{
if (fd_A[i] != 0)
socket_close(fd_A[i]);
}
socket_term();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: