求助:ipv6编程过程中,bind函数报错,errno为29,即Illegal seek
如题,请大侠多多指导,求助。谢谢。
具体源代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <signal.h>
#include <time.h>
#include <netdb.h>
#include <sys/time.h>
#include <sys/file.h>
#define MAXBUF 1024
int main(int argc, char **argv)
{
     int sockfd, new_fd;
     socklen_t len;
     //char addrtmp[128];
         int errvalue=0;
     /* struct sockaddr_in my_addr, their_addr; */ // IPv4
     //struct sockaddr_in6 my_addr, their_addr; // IPv6
         struct sockaddr_in6 their_addr;
         struct addrinfo hints,* res;
     unsigned int myport, lisnum;
     char buf[MAXBUF + 1];
     if (argv[1])
         myport = atoi(argv[1]);
     else
         myport = 9998;
     if (argv[2])
         lisnum = atoi(argv[2]);
     else
         lisnum = 2;
         bzero(&hints,sizeof(struct addrinfo));
         hints.ai_flags=AI_PASSIVE;
         hints.ai_family=AF_INET6;
         hints.ai_socktype=SOCK_STREAM;
         errvalue=0;
         if((errvalue=getaddrinfo(argv[3],argv[1],&hints,&res))!=0)
         {
                 perror("getaddrinfo");
                 exit(1);
         }
         if(res==NULL)
         {
                         printf("res pointer is null\n");
                         exit(1);
         }
         if((sockfd=socket(res->ai_family,res->ai_socktype,res->ai_protocol))==-1)
         {
                         perror("socket");
                         exit(1);
         }
         const int on=1;
         setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on));
         if((errvalue=bind(sockfd,res->ai_addr,res->ai_addrlen))!=0) //出错位置
         {
                         perror("bind");
                         printf("strerror(errno)=%s\n",strerror(errno));
                         printf("errvalue=%d\n",errno);
                         exit(1);
         }
     if (listen(sockfd, lisnum) == -1) {
         perror("listen");
         exit(1);
     } else
         printf("begin listen\n");
     while (1) {
         len = sizeof(struct sockaddr);
         if ((new_fd =
              accept(sockfd, (struct sockaddr *) &their_addr,
                     &len)) == -1) {
             perror("accept");
             exit(errno);
         } else
             printf("server: got connection from %s, port %d, socket %d\n",
                    /* inet_ntoa(their_addr.sin_addr), */ // IPv4
                    inet_ntop(AF_INET6, &their_addr.sin6_addr, buf, sizeof(buf)), // IPv6
                    /* ntohs(their_addr.sin_port), new_fd); */ // IPv4
                    their_addr.sin6_port, new_fd); // IPv6
         /* ............... */
         bzero(buf, MAXBUF + 1);
         strcpy(buf,
                "......................\n...new_fd...accept......socket.