socket fdopen有关问题

socket fdopen问题
C/C++ code

#include <stdio.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <unistd.h>
#include <sys/socket.h>
#include <string.h>
#include <fcntl.h>

int main(void) {
    struct sockaddr_in sin;
    struct sockaddr_in cin;
    int lfd;
    int afd;
    FILE * fp;
    socklen_t len;
    char buf[400];
    bzero(&sin,sizeof(sin));
    sin.sin_family = AF_INET;
    sin.sin_port = htons(8000);
    sin.sin_addr.s_addr = INADDR_ANY;
    lfd = socket(AF_INET,SOCK_STREAM,0);
    if(lfd < 0) {
        perror("socket");
        exit(1);
    }
    if(bind(lfd,(struct sockaddr *)&sin,sizeof(sin)) == -1) {
        perror("bind");
        exit(1);
    }
    listen(lfd,10);
    while(1) {
        bzero(buf,400);
        afd = accept(lfd,(struct sockaddr *)&cin,&len);
        if(afd < 0) {
            perror("afd");
            exit(1);
        }
        printf("错在哪?\n");
        fp = fdopen(afd,"a+");
        fgets(buf,400,fp);
        printf("%s\n",buf);
        fclose(fp);
        close(afd);
    }
    return EXIT_SUCCESS;
}




每次加上
C/C++ code

fp = fdopen(afd,"a+");
fgets(buf,400,fp);
printf("%s\n",buf);


这几行,我设置断点,居然在:
afd = accept(lfd,(struct sockaddr *)&cin,&len);这一行出错:
运行结果:
afd: Invalid argument

如果不加这几行,就不报错?为什么?求解

------解决方案--------------------
你自己代码写的很清楚了啊,
fopen(***,"a+");这是追加方式,默认文件指针是到文件尾部的,因此你一gets就会出错
fopen(***,"r");这是读方式,默认开始指针是在文件头部的,因此你gets没问题