线程也能阻塞 accept

作者在 2010-07-01 09:48:42 发布以下内容
UINT   ThreadProc(LPVOID   pPara)
{
Info   *fo;
fo   =   (Info*)pPara;
int   nSize   =   sizeof(fo-> server);
SOCKET   s   =   accept(fo-> s,   (sockaddr*)   &fo-> server,&nSize);
char   buffer[100];
ZeroMemory(buffer,100);
recv(s,   buffer,100,0);
AfxMessageBox(buffer);

return   0;
}

void   CSockThreadDlg::OnButton1()  
{
//   TODO:   Add   your   control   notification   handler   code   here
WSADATA   wsa;
WSAStartup(MAKEWORD(2,2),   &wsa);
SOCKET   saServer   =   socket(AF_INET,   SOCK_STREAM,   IPPROTO_TCP);
struct   sockaddr_in   server;
server.sin_family   =   AF_INET;
server.sin_addr.s_addr   =   inet_addr( "172.29.90.96 ");
server.sin_port   =   htons(17777);
int   iResult   =   bind(saServer,   (sockaddr*)&server,sizeof(server));
iResult   =   listen(saServer,5);
Info   fo;
fo.s   =   saServer;
fo.server   =   server;
AfxBeginThread(ThreadProc,&fo);
}
基础知识 | 阅读 1600 次
文章评论,共1条
vfdff(作者)
2010-07-01 13:07
1
#include &quot;u_def.h&quot;<br />
<br />
#if (U_OS == OS_LINUX)<br />
#include &lt;pthread.h&gt;<br />
#elif (U_OS == OS_WIN32)<br />
#include &lt;windows.h&gt;<br />
#define TASK_STACK_SIZE&nbsp; &nbsp;&nbsp;&nbsp;(1024*1024*2)<br />
#endif<br />
<br />
#include &quot;u_task.h&quot;<br />
<br />
UINT32 TASK_CreateThread(UINT32 *p_thread_id, void *attrib, void *entry_func, void *arg)<br />
{<br />
&nbsp; &nbsp; UINT32 ret;<br />
&nbsp; &nbsp; <br />
#if (U_OS == OS_LINUX)<br />
&nbsp; &nbsp; ret = (UINT32)pthread_create((pthread_t *)p_thread_id, (const pthread_attr_t *)attrib, entry_func, arg);<br />
#elif (U_OS == OS_WIN32)<br />
&nbsp; &nbsp; ret = (UINT32)CreateThread((LPSECURITY_ATTRIBUTES)attrib, TASK_STACK_SIZE, <br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; (LPTHREAD_START_ROUTINE)entry_func, arg, 0, (LPDWORD)p_thread_id);<br />
&nbsp; &nbsp; ret = !ret;<br />
#endif<br />
&nbsp; &nbsp; return ret;<br />
}<br />
<br />
<br />
由 mulserver.c 中的以下替代调用验证windows下封装正确性<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //hThread = CreateThread(NULL, 0, ClientThread,&nbsp; &nbsp;// 创建线程<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //&nbsp; &nbsp; &nbsp; &nbsp; (LPVOID)sClient, 0, &amp;dwThreadId);<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;hThread = (void*)TASK_CreateThread(&amp;dwThreadId, NULL, <br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;ClientThread, (void*)sClient); // 创建线程
游客请输入验证码
浏览1970342次