函数二次调用时的分段错误

时间:2015-08-27 03:02:06

标签: c sockets

我正在进行一些套接字编程,系统中的一个节点运行此循环。

while(1) {
    read_fd_set = active_fd_set;
    waiting = select(FD_SETSIZE, &read_fd_set, NULL, NULL, NULL);
    if (waiting < 0) {
      error("ERROR on select");
    }

    for (i = 0; i < FD_SETSIZE; i++) {
        if (FD_ISSET (i, &read_fd_set)) {
            if (i == sockfd[S_IN]) {
                proccess_packet(sockfd[S_IN], sockfd[R_OUT],
                 buffer, atoi(argv[7]));
            }
            if (i == sockfd[R_IN]) {
                perror("yay");
                proccess_packet(sockfd[R_IN], sockfd[S_OUT],
                 buffer, atoi(argv[7]));
            }
        }
    }
}

当初始发件人发送数据包时,一切正常,包括第一次调用“process_packet”。但是当接收方发送其确认时,程序会抛出分段错误,甚至不输入“process_packet”。所以我假设它是调用本身,考虑到之前仍然触发了perror。

void proccess_packet(int sockfd_in, int sockfd_out,
                Packet buffer, int p_trans)
{
    int n;
    bzero(&buffer,BUFLEN);
    n = read(sockfd_in,&buffer,BUFLEN);
    if (n < 0) {
        error("ERROR reading from socket");
    }
    if(buffer.magicno == 0x497E) {
        //if((double)rand()/ (double)((unsigned)RAND_MAX + 1) > p_trans) {
        write(sockfd_out,&buffer,sizeof(buffer));
        //}
    }
}

编辑:

typedef struct {
  int  magicno;
  int  type;
  int  seqno;
  int  dataLen;
  char* data;
} Packet;

0 个答案:

没有答案