Chinaunix

标题: 请教各位大大,为什么sendmsg不成功? [打印本页]

作者: j123    时间: 2005-02-17 10:14
标题: 请教各位大大,为什么sendmsg不成功?
源代码是这样的:

  1. #define CLEN sizeof(struct cmsghdr)+sizeof(int)

  2. union
  3. {
  4. struct cmsghdr cm;
  5. char control[CLEN];
  6. }un;


  7. int main(int argc,char **argv)
  8. {
  9. int fd,new;
  10. struct msghdr msg;
  11. struct cmsghdr *cmsg;
  12. struct iovec iov[1];
  13. char *ptr,c;

  14. if(argc!=2)
  15. {
  16. printf("filename <sockfd#>;\n");
  17. exit((errno>;0)?errno:255);
  18. }

  19. if((fd=open("/ellen/src/t.c",O_RDWR))<0)
  20. {
  21. printf("open file error\n");
  22. exit((errno>;0)?errno:255);
  23. }

  24. new=atoi(argv[1]);

  25. printf("%d\n",new);
  26. msg.msg_control=un.control;
  27. msg.msg_controllen=CLEN;
  28. cmsg=CMSG_FIRSTHDR(&msg);
  29. cmsg->;cmsg_len=CLEN;
  30. cmsg->;cmsg_level=SOL_SOCKET;
  31. cmsg->;cmsg_type=SCM_RIGHTS;
  32. *((int *)CMSG_DATA(cmsg))=fd;
  33. msg.msg_name=NULL;
  34. msg.msg_namelen=0;
  35. ptr="";
  36. iov[0].iov_base=ptr;
  37. iov[0].iov_len=1;
  38. msg.msg_iov=iov;
  39. msg.msg_iovlen=1;

  40. if(sendmsg(new,(struct msghdr *)&msg,0)==-1)
  41. {
  42. printf("sendmsg error\n");
  43. exit((errno>;0)?errno:255);
  44. }
  45. close(fd);
  46. exit(0);
  47. }
复制代码


我把sendmsg改成write,可以发送一个串,应该不是描述符的问题.
请问各位大大,这是咋回事哩?
作者: nhw_cs    时间: 2005-02-17 10:24
标题: 请教各位大大,为什么sendmsg不成功?
用perror(  )或 strerror( ) 将错误信息打印出来看看
作者: j123    时间: 2005-02-17 10:39
标题: 请教各位大大,为什么sendmsg不成功?
输出信息是:Bad file number.
作者: j123    时间: 2005-02-18 11:06
标题: 请教各位大大,为什么sendmsg不成功?
哎!~
作者: crackpot    时间: 2005-02-18 13:58
标题: 请教各位大大,为什么sendmsg不成功?
GDB以下看是哪一步出错
new=atoi(argv[1]);
这句是干嘛的
作者: brucelee520    时间: 2005-02-21 00:45
标题: 请教各位大大,为什么sendmsg不成功?

看来我要好好读书啊




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2