错误:'SO_STATE'未声明

时间:2015-09-23 10:47:06

标签: c sockets solaris-10

socket.h中有一个宏“SO_STATE”,它似乎不存在于solaris 10中。

考虑以下计划:

 #include <stdio.h>  
 #include <unistd.h>  
 #include <stdlib.h>  
 #include <errno.h>  
 #include <string.h>  
 #include <sys/types.h>  
 #include <sys/socket.h>  
 #include <assert.h>  

/* 
 * This function reports the error and 
 * exits back to the shell: 
 */  
 static void  
 displayError(const char *on_what) {  
  if ( errno != 0 ) {  
      fputs(strerror(errno),stderr);  
      fputs(": ",stderr);  
  }  
  fputs(on_what,stderr);  
  fputc('\n',stderr);  
  exit(1);  
 }  

 int main(int argc,char **argv) {  
  int z;  
  int s = -1;       /* Socket */  
  int sndbuf=0;     /* Send buffer size */  
  int rcvbuf=0;     /* Receive buffer size */  
  socklen_t optlen; /* Option length */  

    /* 
  * Create a TDP/IP socket to use: 
  */  
  s = socket(PF_INET,SOCK_STREAM,0);  
  if ( s == -1 ) {  
    displayError("socket(2)");  
  }  

 /* 
  * Get socket option SO_SNDBUF: 
  */  
  optlen = sizeof sndbuf;  
  z = getsockopt(s,  
                 SOL_SOCKET,  
                 SO_STATE,  
                 &sndbuf,&optlen);  
  if ( z ) {  
    displayError("getsockopt(s,SOL_SOCKET,"   
                     "SO_SNDBUF)");  
  }  

  assert(optlen == sizeof sndbuf);  

 /* 
  * Get socket option SO_SNDBUF: 
  */  
  optlen = sizeof rcvbuf;  
  z = getsockopt(s,  
                 SOL_SOCKET,  
                 SO_RCVBUF,  
                 &rcvbuf,&optlen);  
  if ( z ) {  
    displayError("getsockopt(s,SOL_SOCKET,"  
                 "SO_RCVBUF)");  
  }  

  assert(optlen == sizeof rcvbuf);  

 /* 
  * Report the buffer sizes: 
  */  
  printf( "Socket s : %d\n",s);  
  printf( "Send buf: %d bytes\n", sndbuf);  
  printf( "Recv buf: %d bytes\n", rcvbuf);  

  close(s);  
  return 0;  
 } 

当我在solaris 10中编译它时,我收到以下错误:

  

sock.c:在函数'main'中:sock.c:47:错误:'SO_STATE'未声明   (首次使用此函数)sock.c:47:错误:(每个未声明   标识符仅报告一次sock.c:47:错误:对于每个函数   它出现在。)

当我在solaris 8中编译它时,它的编译成功。

solaris 10有什么不同?

SOISTATE出现在solaris 8中的socket.h中,然后为什么在solaris 10中将其删除?以下是来自solaris 8。

cat /usr/include/sys/socket.h |grep SO_STATE
#define SO_STATE        0x2000          /* Internal: get so_state */

虽然solaris 10中的socket.h中没有SO_STATE。

0 个答案:

没有答案