考试网 >> IT认证 >> 水平 >> 软件指导 >> socket编程原理(六)

socket编程原理(六)

发布时间:2006-06-28 03:36     点击:
分页:上一页  1 2 3 4 [5] 6 7 8 9  下一页

/* 如果错误代码是EWOULDBLOCK和EINPROGRESS,则不用关闭套接字,因为系统将在之后继续为套接字建立连接,连接是否建立成功可用select()函数来检测套接字是否"可写"来确定。*/

close(tmpsock);

return(-3); /* Connect error. */

}

}

FD_SET(tmpsock, &Mysock.readfds);

FD_SET(tmpsock, &Mysock.writefds);

FD_SET(tmpsock, &Mysock.exceptfds);

i = 0;

while (Mysock.Sockets[i] != 0) i++; /* look for a blank sockets position */

if (i >= 64) {

close(tmpsock);

return(-4); /* too many connections */

}

Mysock.Sockets[i] = tmpsock;

Mysock.SockNum++;

return(i);

}

int AcceptConnection(struct in_addr *IPaddr)

/* Accept a connection. If succeed, return the data sockets number, else return -1. */

{

int newsock, len, flag=1, i;

struct sockaddr_in addr;

len = sizeof(addr);

bzero((char *)&addr, len);

if ((newsock = accept(Mysock.DaemonSock, &addr, &len)) == -1) 

return(-1); /* Accept error. */

/* Set this socket as a Non-blocking socket. */

ioctl(newsock, FIONBIO, &flag);

FD_SET(newsock, &Mysock.readfds);

FD_SET(newsock, &Mysock.writefds);

FD_SET(newsock, &Mysock.exceptfds);

/* Return IP address in the Parameter. */

IPaddr->s_addr = addr.sin_addr.s_addr;

i = 0;

while (Mysock.Sockets[i] != 0) i++; /* look for a blank sockets position */

if (i >= 64) {

close(newsock);

return(-4); /* too many connections */

}

Mysock.Sockets[i] = newsock;

Mysock.SockNum++;

return(i);

}

int CloseConnection(int Sockno)

/* Close a connection indicated by Sockno. */

{

int retcode;
分页:上一页  1 2 3 4 [5] 6 7 8 9  下一页
版权申明:未经书面授权请勿转载本站信息!!作品版权归所属媒体与作者所有!!
发表评论: 匿名发表 用户名: 查看评论
您将承担一切因您的行为、言论而直接或间接导致的民事或刑事法律责任
留言板管理人员有权保留或删除其管辖留言中的任意内容
本站提醒:不要进行人身攻击。谢谢配合。
在本站搜索相关信息
2003-2005 Ksw123.com All Rights Reserved. - TOP
Copyright © 2006 Ksw123.com. All rights reserved.中国考题网 版权所有