当前位置:  技术问答>linux和unix

为什么我的setsockopt调用会什失敗?

    来源: 互联网  发布时间:2015-10-17

    本文导语:  我在成功创建一个socket之后,调用setsockopt设置接收超时时间,但失败了 ,为什么,请高手指教(redhat 9操作系统),源代码如下:   int ret;   ret = setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(timeout));         ...

我在成功创建一个socket之后,调用setsockopt设置接收超时时间,但失败了 ,为什么,请高手指教(redhat 9操作系统),源代码如下:
  int ret;

  ret = setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(timeout));

          if (ret == -1)
  {
    return FALSE;
  }

  return TRUE;
其中s是一个全局变量,大小由mysocket函数返回,调式过程中为8,timeout是我指定的,为200,调试中SOL_SOCKET的值为1,SO_RCVTIMEO的值为20.
mysocket函数如下:
int mysocket(int af, int type, int protocol)
{
  int s;
  if ((s = socket(af, type, protocol)) == -1)
  {
    printf("Create Socket Failedn");
    return -1;
  }
  else
  {
     printf("Create Socket succeed!n");
   }

   return s;
}
我是这样调用mysocket函数的
          if ((s = mysocket(AF_INET, SOCK_STREAM, 0)) == -1)
  {
     return FALSE;
  }

|
这个在我机器上能行。

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

int main(int argc, char *argv[]) {
int sockfd;
struct sockaddr_in saddr;
struct timeval timeout = {
.tv_sec = 0,
.tv_usec = 200,
};
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("socket");
exit(1);
}
if (setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout)) == -1) {
perror("setsockopt");
exit(1);
}
memset(&saddr, 0, sizeof(struct sockaddr_in));
saddr.sin_port=htons(9999);
saddr.sin_family=AF_INET;
saddr.sin_addr.s_addr=inet_addr("192.168.1.10");
if (connect(sockfd, (struct sockaddr*)&saddr, sizeof(saddr)) == -1) {
perror("connect");
exit(1);
}
exit(0);
}


|
调用后,如失败使用perror("Error:")看看出什么信息
当然要#include 

|
绝大多数情况用#include 就行了,最好不要直接用linux/下的头文件。

|
可能有些是系统用到的,有些是应用程序用到的

|
楼主,你可以用man查Linux的用户手册啊,哪个函数的申明在哪个头文件中以及setsockopt返回错误等等这些信息都可以查到。这可是学习linux最主要的手段啊,你不会不知道吧?

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 为什么我的setsockopt()总提示setsockopt: No such device
  • setsockopt出错
  • 关于igmp的setsockopt
  • setsockopt()函数的问题
  • [求助]请教各位一个关于setsockopt的问题!
  • setsockopt问题
  • 为什么setsockopt没有用?
  • 请问大家setsockopt()里面optval的作用到底什什么
  • 使用原始套接字来发送一个icmp包,不适用setsockopt做控制会怎么样?
  • setsockopt(),该函数的一个用法。
  • 求教:用poll和用Setsockopt设置SO_RCVTIMEO,SO_SNDTIMEO有什么区别?
  • 怎样解决"Cannot set Socket Options for Trasnmit Socket" error 当使用setsockopt() 在solaris 5.8
  • err=sock->ops->setsockopt(sock, SOL_SOCKET, ...);返回值代表的含义?
  • setsockopt的参数optname的意义?
  • setsockopt设置了linger选项的疑问
  • linux setsockopt 没有IPPROTO_TCP吗?(100)
  • 请问: setsockopt(s,SOL_SOCKET,SO_DONTLINGER,(const char*)&bDontLinger,sizeof(BOOL)); 中的,(const char*)&bDontLinger是什么意思啊
  • 请教关于setsockopt(来者有分)
  • setsockopt延时的问题
  • 组播报错setsockopt: No such device


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3