LinuxÒÁµéÔ°ÂÛ̳'s Archiver

shinepeak ·¢±íÓÚ 2004-3-8 11:17

Ææ¹ÖµÄÏ̴߳íÎó(·Ç¸ßÊÖ²»ÒªÂһظ´,лл!)

ÎÒÔÚ±àдÏ̳߳ÌÐòʱ,·¢ÏÖÆæ¹ÖµÄÏÖÏó.N3We R)l
    ³ÌÐòÊǼòµ¥µÄClient-Server»ØÏÔ³ÌÐò,Server¶ËʹÓÃÏ̼߳¼Êõ,ÿ½ÓÊÜÒ»¸ö¿Í»§¶ËÁ¬½Ó,´´½¨Ò»¸öÏ߳̽øÐлØÏÔ´¦Àí.
,u G+J1T~     Ææ¹ÖµÄÊÇ,ÔÚRedHat7.2ϱàÒëºó,Ò»ÔËÐÐ,³ÌÐòÔÚpthread_create()´¦³öÏÖ"Segmentation fault"´íÎó.-h!YY6ZSSN b2I
    ÔÚRedHat9.0ϱàÒë,³ÌÐòÔÚpthread_create()ûÓÐÈκδíÎó,½øÈëÏß³ÌÄÚ²¿µÄreadº¯Êýʱ,³öÏÖ"Segmentation fault"´íÎó,²»ÖªÊǺÎÔ­Òò?

dearvoid ·¢±íÓÚ 2004-3-8 12:16

your code ?

shinepeak ·¢±íÓÚ 2004-3-8 13:26

int main(int argc, char **argv)6GFb IX.k
{
y,kWd#n9ru         pid_t        childpid;
0M"p? T[5[y9ep         struct sockaddr_in6 servaddr;
v M$QOn4D7hU"UHs         int                listenfd;
Vt)D&d,B0v#uPm         socklen_t                clilen;4C+]y%A]Gwv
        struct proc2thread_t *p2t;o)W\EM9ua
        int on;
/~F{ Mf;b zm ]*K3r]4hHVh
        if ((argc > 1) && strncmp(argv[1], "-f", 2) == 0)7VA-~5[4[5R }o
                goto dont_fork;
6e"Ek-AA(^         RN }PMh8w(C
        if ((childpid = fork()) != 0)
U8E&~;IS                 exit(0);
b/w-BjC:h2g1qUy]y*q #^lwK4tA5a5f)A
dont_fork:8O*gb(b fHv#Z;_
        if ((listenfd = socket(AF_INET6, SOCK_STREAM, 0)) < 0)(H1d&| m7x!K:G8SdD
        {
+D`1P)k5d&NW0IE~                 syslog(LOG_ERR, "Creation socket fail!\n");
]nm \ m'\*E"P*n K                 exit(0);!\%G D6~Ok
        }^ f+DjX uJ
8f"a/\+A2q @!XD
        bzero(&servaddr, sizeof(servaddr));o U[8nz3JLH
        servaddr.sin6_family = AF_INET6;
*YS{zoq/b5O8}:? V         servaddr.sin6_addr =  in6addr_any;
`*x;Rlxe:l         servaddr.sin6_port = htons(SERV_PORT);g,s&^u7_x@

sW0O$r%C4U)O S         if (setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof (on)) < 0):B&T:TM@+n0S3Y
        {FPu d^9\~
                syslog(LOG_ERR, "setsockopt of SO_REUSEPORT error");,W,q ^ X0E9?@] W T
                exit(0);+l_ T1kxBo
        }
f ?iD#I
W#o_:e t,@7gK         if ((bind(listenfd, (struct sockaddr *) &servaddr,
C%Gq2K^C:d(Qr                 sizeof(struct sockaddr_in6))) < 0)
_5tc$Y_@J'X8B{         {
{&Hl8lYN                 syslog(LOG_ERR, "Bind fail!\n");$C5]A+bOo_;N
                exit(0);pzTct6?xz%] v
        }J&v4VVhnEa9N

+Y#Xe:I { orO         if (listen(listenfd, LISTENQ) < 0)H)K(l3@ xj;l
        {
eZY2y_c                 syslog(LOG_ERR, "Listen fail!\n");dC#i S2k]{N d
                exit(0);2Tu2T%P:t ~w:dN
        }w/{Y8s l?:M@T
G,T W7aT"T N
        for(;;)
SLG%`PM_         {E!O#Ty Ay+ZO
                if ((p2t = (struct proc2thread_t *)malloc(sizeof(struct proc2thread_t))) == NULL)2U_6Q+Js1m
                {
5hV8`:i[ \fKH2n                         syslog(LOG_ERR, "MALLOC fail!\n");"oj-K5D'p/G}
                        break;N;@d-v?)ZKo?n
                }8f)N Hu1LKi#?.]6G1f
                "P5Y mqt1_;P
                clilen = sizeof(p2t->t_cliaddr);                       
kk9C5?!G,XO                 if ( (p2t->t_connfd = accept(listenfd, (struct sockaddr *) &(p2t->t_cliaddr), &clilen)) < 0) y/z2\D+d9D5q9b4s](D
                {]:s/? hu[X#YD
                        if (errno == EINTR)
Ztv9S nU                                 continue;               
OL)x1KJ;z                         elseq-fu s1{;a
                                syslog(LOG_ERR, "Accept fail!\n");
4th\_x)n6aJ!{                 }@d,s ~ iO8X!O{
                if (pthread_create(NULL, NULL, &pthread_handle, (void *)p2t) != 0)3L[.]5c8?9l {B
                {
dy[ h | tb                         close(p2t->t_connfd);
to,Y:jl7_lO;@\                         free(p2t);
qb.sB)F"R.O7aEc*`                         continue;zH)Rx| ?R*w,E9|v
                }
H |&}$R4P;r         }
W???4apP;}dh _&f W/l\9_X
        return 0;oSc5vz*D/S(^
}
y r W#fB \$B;K Z5vD7Z XZ
#U*i:zv#v?V
static void *pthread_handle(void *arg)
#\R/QJi ~)W {
9qK])Z;f!Ajo b-C         struct proc2thread_t *p2thread;
#\drCpK         int rc;6F PzE2S!U$s*gH
        char buf[BUFLEN + 1];'JPCh,_6_
        char addrstr[INET6_ADDRSTRLEN + 8];
"]A-aIk9Fa+H         char addr[INET6_ADDRSTRLEN];u ].z3`/_*m S
        FILE *fd = 0;Xv8ab/S Ps
        char line[BUFLEN + INET6_ADDRSTRLEN + 8 + 1];N9o*G HACX

B,r;N1ae4}}         pthread_detach(pthread_self());)wwS4S4a
        p2thread = (struct proc2thread_t *)arg;
bD8q2{ F2Q"Is
&G[T_e sN\$i2a
        for (;;)
8i@6qZ#Z/[ A![         {
| c&wj"J                 if ((rc = read(p2thread->t_connfd, buf, BUFLEN)) < 0)
)h0`BYL)ZL                 {
I b&n zH-w:ec                         syslog(LOG_ERR, "Read fail! Close connection!\n");
#Y` j @+yq;bH                         break;*F`.UyNS,Lj
                }
q&R,^_"C m+R                 else if (rc ==0 )
}OyZ%o y                         continue;Z#W!I,E_"sD
                if (strncmp(buf, BYESTR, sizeof(BYESTR)) == 0):L6Gj||r$l^
                {
6vJjw%{                         syslog(LOG_INFO, "Client bye!\n");
N.qW4Y/A                         break;
$~\ z0AjT/iLQ                 }]*p6wt n:uNU@?rh
9KT4rA }8Y]'Pe
                sprintf(addrstr, "[%s]:%hd",
jCv+D7ny&l x1U]                         inet_ntop(AF_INET6, (void *) &(p2thread->t_cliaddr.sin6_addr), addr, |` FL&H
                                INET6_ADDRSTRLEN), ntohs(p2thread->t_cliaddr.sin6_port));
;{/ImEM:zN #\&@1u;tAN.nx:ou
                /* Write file */
l2aE3D#{.K'UP cR                 pthread_mutex_lock(&fileop_mutex);3Pw"i@P-y(St#r(Jh
               
w%S;ZW7WTc(bM                 if ((fd = fopen(CLIENTFILE, "a+")) == NULL)-\JbI%c9G
                {)?0|z@B1R!O,EP~wH
                        syslog(LOG_ERR, "FOPEN fail!\n");%^p:d9x`#N
                        break;F m-qQ2rNK [H
                }
?Y)DLVO"i ~N                 strcpy(line, addrstr);
$@%@Sh:_R+E3aIsYy                 strcat(line, ":");
"v2?"V.r;@r| F                 strcat(line, buf);
bo[%tBPp5{hA                 fprintf(fd, line);
.K6XB1y3_VU"q3b}                 fclose(fd);
kQSh.Yr5u c J3t                 pthread_mutex_unlock(&fileop_mutex);OT+e1B'nr
                I)G \ ot#l
                if (write(p2thread->t_connfd, buf, rc) < 0)Y1Y r0IvF
                {
X]z } p.Qkp OuZs                         syslog(LOG_ERR, "Write fail!\n");
/?J Y+uA7U&Z"RKa                         break; p7JjL2|
                }
li*~l%@&V.q9[+YC         }
Oehggy                
Ob'hJ2p;d6o%T ys:b]         close(p2thread->t_connfd);        /* we are done with connected socket */
"qFNJ{ I         free(p2thread);
2u T"c {mQl         return(NULL);
/pm6NGb }

flag ·¢±íÓÚ 2004-3-8 14:02

IPv6?#MjCcr{@&H9a
ºÇºÇ¡£

shinepeak ·¢±íÓÚ 2004-3-8 15:37

°æÖ÷²»ÒªÖ»ÊÇ"ºÇºÇ"ѽ,°ïæ¿´¿´,лл!

flag ·¢±íÓÚ 2004-3-8 15:46

ÄÚºËÖ§³Ö²»Ö§³Ö£¿7.1Êǿ϶¨²»Ö§³ÖµÄ£¬ÎҼǵÃÒÔǰÊÇ´ò¹ý²¹¶¡µÄ¡£

flag ·¢±íÓÚ 2004-3-8 16:17

ÓиöÎÊÌ⣬ΪʲôÄãµÄpthread_handleÊÇstatic void *£¬¶øÄãµÄpthread_createÓõÄÈ´ÊÇ&pthread_handle£¬&pthread_handleµÃµ½µÄµØÖ·ÊÇÄÄÀÌìÏþµÃ£¡

dearvoid ·¢±íÓÚ 2004-3-8 18:27

Óà & ȡһ¸öº¯ÊýµÄµØÖ·ÊÇ¿ÉÒÔµÄ

xjlblues ·¢±íÓÚ 2004-3-9 00:13

º¯ÊýÃûpthread_handle¾ÍÊǺ¯ÊýµÄµØÖ·¡£&thread_handleÈ¡µØÖ·µÄµØÖ·¡£

shinepeak ·¢±íÓÚ 2004-3-9 09:36

pthread_create()Ô­ÐÍ£º`4Y&e,g8H3_ Q'f
int  pthread_create(pthread_t  *thread, pthread_attr_t * attr,
/bx8L^&z9V)K      void * (*start_routine)(void *), void * arg)

dearvoid ·¢±íÓÚ 2004-3-9 09:45

[QUOTE][i]×î³õÓÉ xjlblues ·¢²¼[/i]
;L)kV@3T#Je8G [B]º¯ÊýÃûpthread_handle¾ÍÊǺ¯ÊýµÄµØÖ·¡£&thread_handleÈ¡µØÖ·µÄµØÖ·¡£ [/B][/QUOTE]#GL'A Z CJ"[!Nf;a
µØÖ·»¹ÓеØÖ· ?

shinepeak ·¢±íÓÚ 2004-3-9 13:26

Ŀǰ¿´À´¿Ï¶¨²»ÊǺ¯ÊýµØÖ·µÄÎÊÌ⣬¹Ø¼üÊÇ7.2ºÍ9.0³ö´íµÄλÖã¬ÎÒ²»ÖªµÀÊDz»ÊÇÓÐʲô¿âÐèÒªÖ§³Ö£¿

leizhi ·¢±íÓÚ 2006-10-11 15:54

ÎÒÓиö¶àÏß³Ìsockt³ÌÐòһͨ¹ý ÈçÐèÒªÇëÁªÏµqq:275421450

Ò³: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.