免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 819 | 回复: 0
打印 上一主题 下一主题

SO_REUSEADDR on Solaris [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-01-25 02:21 |只看该作者 |倒序浏览
唉,还是 SO_REUSEADDR ....

我希望构造两个socket,绑定到同一个本地端口。一个监听、一个对外连接。
似乎这是用SO_REUSEADDR可以解决的,可是在我的Solaris 9就是不允许。

同样的代码在Windows和Linux下都试过,达到了我的目的。难道Solaris
不允许这样的行为?

代码:----------------------------------------------------
#include "stdafx.h"
#include <winsock2.h>;

int sock_init()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 2, 2 );

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
  return 0;
}
return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
sock_init();
SOCKET  lhdl, chdl;
sockaddr_in laddr;

BOOL one = TRUE;

laddr.sin_family = AF_INET;
laddr.sin_port   = htons(5150);
laddr.sin_addr.s_addr = htonl(INADDR_ANY);

lhdl = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
chdl = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

bind(lhdl, (SOCKADDR*)&laddr, sizeof(laddr));

//++++++++++++++++++++++++++++++++++++++++++++++++
// if we uncomment the setsockopt call, second bind will success
//++++++++++++++++++++++++++++++++++++++++++++++++
// setsockopt(chdl, SOL_SOCKET, SO_REUSEADDR, (const char*)&one,sizeof one);
bind(chdl, (SOCKADDR*)&laddr, sizeof(laddr));

listen(lhdl, 5);

SOCKADDR_IN raddr;
raddr.sin_family = AF_INET;
raddr.sin_port   = htons(80);
raddr.sin_addr.s_addr = inet_addr("202.38.215.238";

connect(chdl, (SOCKADDR*)&raddr, sizeof(raddr));

// wait for checking port status via netstat
getchar();
WSACleanup();

return 0;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP