Win2003 下 Socket独占的问题

Moyox 2010-08-27 04:21:44
我在Win2003下用socket绑定了一个端口,然后这个程序会向一个PHP发起POST请求,那个PHP的代码就是连接到刚才那个程序绑定的端口,获取信息。

这个操作在WinXP下没有任何问题,两个可以同步进行,但是在Win2003下就不起作用了,03下的程序对外发起连接时,自身绑定的socket端口不能接收任何连接。这个是为什么啊?

程序的socket连接用的是非阻塞模式,select模型,pthread多线程处理。代码如下:


// client信息
int client;
struct sockaddr_in client_addr;
int sock_size = sizeof(struct sockaddr_in);
// select 模型
fd_set fdRead;
struct timeval fdTV = {1, 0};

// 准备线程
pthread_t Thread_pid;

pthread_attr_t Thread_attr;
pthread_attr_init(&Thread_attr);
pthread_attr_setscope(&Thread_attr, PTHREAD_SCOPE_PROCESS);
pthread_attr_setdetachstate(&Thread_attr, PTHREAD_CREATE_DETACHED);

// 循环接收连接请求
while (1)
{
FD_ZERO(&fdRead);
FD_SET(sock, &fdRead);
switch ( select(sock, &fdRead, NULL, NULL, &fdTV) )
{
default:
if ( FD_ISSET(sock, &fdRead) )
{
client = accept(sock, (struct sockaddr*)&client_addr, &sock_size);
//
printf("Begin 2 create thread on socket: %d\n", client);
pthread_create(&Thread_pid, &Thread_attr, APISelect, client);
//
printf("Thread Created.\n");
}
}
}
...全文
83 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Moyox 2010-08-28
  • 打赏
  • 举报
回复
这个问题没有人碰到过么?
Moyox 2010-08-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lyramilk 的回复:]

Windows2003的iis默认是打开的。
WindowsXP的iis默认是不安装的。
如果你的client想把断口开在80,就会失败。

另外你能把问题描述清楚吗?
[/Quote]

是这样的,这个程序是绑定的8090端口,绑定成功了,自带的一个HTTP测试功能,浏览器访问可以返回测试信息。这些都没有问题,但是,如果我用这个程序新建立一个socket连接,去访问一个PHP页面,那个PHP页面的功能就是用fsockopen来连接这个程序的8090端口,这样的操作在XP下没问题,但是在03下就无法实现,PHP端测试的原因是无法连接到这个程序的8090端口。所以说,就像socket独占了一样,同时只允许一个连接,多个连接同时进行的时候就失败了。

不知道为什么,在XP下没问题的代码,到了03下就有问题了。
lyramilk 2010-08-27
  • 打赏
  • 举报
回复
Windows2003的iis默认是打开的。
WindowsXP的iis默认是不安装的。
如果你的client想把断口开在80,就会失败。

另外你能把问题描述清楚吗?
Moyox 2010-08-27
  • 打赏
  • 举报
回复
补充一下,程序对外发起POST请求时用的是新创建的socket

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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