令人困惑的socket通讯问题
本人在unix服务器下编的程序,代码包括如下部分
r = bind(s,(struct sockaddr*)&sin,len);
if (r < 0)
{
printf("bind error.\n");
return -1;
}
每次程序运行到这里,都回出现"bind error",然后退出,本人实在不知道原因.
以前写的好多可执行文件,如果包含这个语句,执行到这条语句的时候,都退出了.
用ps -ef命令查看,并没有其他端口在使用socket,哪位大虾可以指点下,多谢.
------解决方案--------------------先用
if (r < 0)
{
printf("bind error. %s\n", strerror(errno));
return -1;
}
看看错误原因是什么
------解决方案--------------------#include <sys/types.h>
#include <sys/socket.h>
int bind(int sockfd, const struct sockaddr *my_addr, socklen_t addrlen);
参数:
sockfd:套接字描述词。
my_addr:需要绑定在套接字上的地址,是类似于以下结构体的变量
struct sockaddr {
sa_family_t sa_family;
char sa_data[14];
}
addrlen:地址的长度,以字节为单位。
返回说明:
成功执行时,返回0。失败返回-1,errno被设为以下的某个值
EACCES:地址受到保护,而使用者并非超级用户
EBADF:sockfd不是有效的文件描述词
EINVAL:套接字上已绑定了另外的地址
ENOTSOCK:sockfd索引的是文件,不是套接字
以下是Unix域(AF_UNIX)套接字特有的错误值
EACCES:对路径包含的部分目录不具有搜索权能
EADDRNOTAVAIL:接口不存在,或者请求的地址不是本地地址
EFAULT:my_addr指向使用者可访问的空间外
EINVAL:addr_len不正确,或者套接字不属于AF_UNIX家族
ELOOP :my_addr解析的过程中存在太多的符号连接
ENAMETOOLONG:my_addr超出可允许的长度
ENOENT:文件不存在
ENOMEM: 核心内存不足
ENOTDIR:路径名的部分内容不是目录
EROFS :套接字位于只读的文件系统
http://club.cn.yahoo.com/bbs/threadview/1200062866_55__pn.html
------解决方案-------------------- if (r < 0)
{
perror("bind error.");
return -1;
}
现看看出错原因