LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1355|回复: 5

可以多次bind同一个socket套接字吗?

[复制链接]
发表于 2005-4-24 21:23:50 | 显示全部楼层 |阅读模式
如下程序:
memset(&sin, 0, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = INADDR_ANY;

sin.sin_port = htons(80);
if (bind(http_fd, (struct sockaddr *)&sin, sizeof(sin)) < 0)
        err(1, "bind");

sin.sin_port = htons(443);
if (bind(https_fd, (struct sockaddr *)&sin, sizeof(sin)) < 0)
        err(1, "bind");
……
我们看到,两次分别把80端口和443端口bind给sin,不知道这样可以吗?如果可以,能不能给解释一下为什么要这样做?以及这样做有什么样的效果?
发表于 2005-4-24 21:55:39 | 显示全部楼层
好像是可以的。不过为什么要这么做就不知道了,是不是在检测端口有没有被占用啊?
回复 支持 反对

使用道具 举报

发表于 2005-4-25 19:26:21 | 显示全部楼层
两次分别把不同的端口绑定给 http_fd 和 https_fd,是两个不同的 socket。

sin只是临时当参数用用而已,赋多少次值有什么关系。
回复 支持 反对

使用道具 举报

发表于 2005-4-25 22:32:23 | 显示全部楼层
bind是将一个socket的地址设为一个(addr,port)对, 对一个已经绑定的socket, 不能再进行绑定. 再次绑定bind返回-1, error == EINVAL.

详细情况请参阅man手册:
EINVAL The  socket  is already bound to an address.  This may change in
              the future: see linux/unix/sock.c for details.
回复 支持 反对

使用道具 举报

发表于 2005-4-25 23:04:01 | 显示全部楼层
Post by doubleelec
两次分别把不同的端口绑定给 http_fd 和 https_fd,是两个不同的 socket。

sin只是临时当参数用用而已,赋多少次值有什么关系。


这两个变量名也起得太像了吧-_-!!!
回复 支持 反对

使用道具 举报

发表于 2005-4-26 09:37:04 | 显示全部楼层
不行,一个socket只能bind一个!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表