日期:2014-05-16  浏览次数:20571 次

令人困惑的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;


现看看出错原因