初级问题.请大侠指教.listen

cnvvv 2004-05-10 09:25:01
过程如下:
m_ListenSocket = WSASocket(...);
bind(...);
listen(...);
当开始listen时.我并不处理新来的连接.也就是当有用户连接时.我不建Accept的Socket.

问:
这个情况,客户端还能连接上服务端吗?服务器怎么关闭这样的连接呢?
...全文
46 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnvvv 2004-05-10
  • 打赏
  • 举报
回复
没有accept.同样可以连接上.但就是不能收发操作与其它.这时连接是成功的.只是server没作处理.我想知道.这些连接我如何在特定时间时关掉它们呢?
netsys2 2004-05-10
  • 打赏
  • 举报
回复
如果你没有accept,就不能建立SOCKET连接。

下面是一个标准的SERVER代码

AnsiString Cadd;
struct sockaddr_in fsin,sin;
SOCKET ssock;
struct hostent *hostname;
int alen;
WSADATA wsadata;
if(WSAStartup(WSVERS,&wsadata)!=0)
{
//启动WinSock失败
SendMessage(m_hwnd,WM_SOCKET,INITERR,0);
return;
}
//启动WinSock成功
SendMessage(m_hwnd,WM_SOCKET,INITOK,0);
memset(&sin,0,sizeof(sin));
sin.sin_family=AF_INET;
sin.sin_addr.s_addr=inet_addr("");
sin.sin_port=htons(m_port);
msock=socket(PF_INET,SOCK_STREAM,0);
if(msock==INVALID_SOCKET)
{
//创建Socket失败
SendMessage(m_hwnd,WM_SOCKET,CREATEERR,0);
WSACleanup();
return;
}
SendMessage(m_hwnd,WM_SOCKET,CREATEOK,0);
if(bind(msock,(struct sockaddr*)&sin,sizeof(sin))==SOCKET_ERROR)
{
//帮定Socket失败
SendMessage(m_hwnd,WM_SOCKET,BINDERR,0);
closesocket(msock);
WSACleanup();
return;
}
SendMessage(m_hwnd,WM_SOCKET,BINDOK,0);
if(listen(msock,5)==SOCKET_ERROR)
{
//监听失败
SendMessage(m_hwnd,WM_SOCKET,LISTENERR,0);
closesocket(msock);
WSACleanup();
return;
}
SendMessage(m_hwnd,WM_SOCKET,LISTENOK,0);
while(!this->Terminated)
{
alen=sizeof(struct sockaddr);
ssock=accept(msock, (struct sockaddr *)&fsin, &alen);
if(ssock==INVALID_SOCKET)
{
//接受请求失败
SendMessage(m_hwnd,WM_SOCKET,ACCEPTERR,0);
closesocket(msock);
WSACleanup();
this->Terminate();
return;
}
//接受请求成功。启动新线程接管
Cadd=AnsiString(inet_ntoa(fsin.sin_addr));
transmit=new Ttransmit(false); //启动新的线程接管accept到的socket
transmit->Init(&ssock,m_hwnd,Cadd);
}
cnvvv 2004-05-10
  • 打赏
  • 举报
回复
如果有漏掉的连接我没有accept.这样就进入了协议栈内部接受的连接,这样会占用一个listen(...)时设置的个数.这样漏掉的accept.我要如何处理他呢?

感谢您.太感谢您了
COM_MOC 2004-05-10
  • 打赏
  • 举报
回复
不明白你说的意思,accept是用来接受连接的,如果不调用这个函数即使协议栈内部接受连接,你的应用程序是不知道的,更不用说后续处理了。
cnvvv 2004-05-10
  • 打赏
  • 举报
回复
自己up一下.唉.......
cnvvv 2004-05-10
  • 打赏
  • 举报
回复
是不是分少呢?如果分少.我可以另开帖.大侠们.帮帮我吧

4,356

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧