高手们看看这个c程序错在哪,解决有关问题马上给分(虽然不多)

高手们看看这个c程序错在哪,解决问题马上给分(虽然不多)!
目的:当一个client上传数据,server将组播到所有连接的用户。
程序中又两次fork(),第一次是用来做并发服务器的,第二次的子进程用来循环检测ctrlist数组。

#define   SERVERPORT   7077

typedef   struct   {
char   occupied[10];
int   procid;
int   modifying;
int   sendtothers;
}ctrlist;

int   shmid,shmid2;  
int   main()
{
int   s_fd,bdret,lisnret,new_fd;
struct   sockaddr_in   srv_addr;
char   *addr;
char   *addr2;
char   *combuf;
ctrlist   *cl;
pid_t   pid,pid2;

shmid   =   shmget(IPC_PRIVATE,10*sizeof(ctrlist),IPC_CREAT|0777);
        shmid2   =   shmget(IPC_PRIVATE,1024*1024*sizeof(char),IPC_CREAT|0777);
s_fd   =   socket(AF_INET,SOCK_STREAM,0);

if(s_fd   <   0)
{
printf( "Socket   error!!\n ");
exit(1);
}

bzero(&srv_addr,sizeof(srv_addr));
srv_addr.sin_family   =   AF_INET;
srv_addr.sin_port   =   htons(SERVERPORT);
srv_addr.sin_addr.s_addr   =   inet_addr( "172.18.128.179 ");
int   n   =   1;
setsockopt(s_fd,SOL_SOCKET,SO_REUSEADDR,&n,sizeof(int));

bdret   =   bind(s_fd,(struct   sockaddr*)&srv_addr,sizeof(srv_addr));
if(bdret   <   0)
{
printf( "Bind   error!!\n ");
exit(1);
}
lisnret   =   listen(s_fd,5);
char   buffer[1024];
bzero(buffer,1024);
int   first=0;
while(1)
{
    first++;

    new_fd   =   accept(s_fd,NULL,NULL);
    if(new_fd   <   0)
{
            printf( "Accept   Error   :   %s!!\n ",strerror(errno));
}
//创建进程
if((pid   =   fork()))//父进程(1)重新监听端口
{  
printf( "first   =   %d\n ",first);          
printf( "first   fork(father):   %d\n ",getpid());
close(new_fd);
}
else   if(pid   <   0)
printf( "Fork   Error   :   %s!!\n ",strerror(errno));
else//子进程(1)
{
printf( "first   fork(child):   %d\n ",getpid());
addr=shmat(shmid,0,0);
                                    cl   =   (ctrlist*)addr;
                            int   k;
            for(k   =   0;k   <   10;k++)//找到一个空位,并填充信息
            if(strncmp(cl[k].occupied, "_+&%ocup+ ",9)   ==   0)
            k++;
            else   {
            strcpy(cl[k].occupied, "_+&%ocup+ ");
            cl[k].procid   =   getpid();
            if(first   ==   1)
            cl[k].modifying   =   1;
            else   cl[k].modifying   =   0;
            cl[k].sendtothers   =   0;
            break;