在调用eXosip_init()时,
经常莫名的不返回!
但是逐行跟踪的话就 没有问题
最后定位到下面的代码不返回
也就是说 如果连续调用jpipe时的话就可能不返回!!
exconf.c
#ifdef OSIP_MT
/* open a TCP socket to wake up the application when needed. */
eXosip.j_socketctl = jpipe ();
if (eXosip.j_socketctl == NULL)
return -2;
eXosip.j_socketctl_event = jpipe ();
if (eXosip.j_socketctl_event == NULL)
return -3;
#endif
然后跟踪jpipe ,猜测是accept的问题
也就是下的一段代码
jpipe.c
connect (my_pipe->pipes[1], (struct sockaddr *) &raddr, sizeof (raddr));
my_pipe->pipes[0] = accept (s, NULL, NULL);
的问题
没有找到什么好的办法去处理上面的为题
最后用了一个比较笨的办法
eXosip.j_socketctl = jpipe ();
if (eXosip.j_socketctl == NULL)
return -2;
Sleep(100); //添加的代码
eXosip.j_socketctl_event = jpipe ();
if (eXosip.j_socketctl_event == NULL)
return -3;
后记:
根据推断 可能是在非阻塞的connect 后 链接丢失 然后就被阻塞在了accept中了!
经常莫名的不返回!
但是逐行跟踪的话就 没有问题
最后定位到下面的代码不返回
也就是说 如果连续调用jpipe时的话就可能不返回!!
exconf.c
#ifdef OSIP_MT
/* open a TCP socket to wake up the application when needed. */
eXosip.j_socketctl = jpipe ();
if (eXosip.j_socketctl == NULL)
return -2;
eXosip.j_socketctl_event = jpipe ();
if (eXosip.j_socketctl_event == NULL)
return -3;
#endif
然后跟踪jpipe ,猜测是accept的问题
也就是下的一段代码
jpipe.c
connect (my_pipe->pipes[1], (struct sockaddr *) &raddr, sizeof (raddr));
my_pipe->pipes[0] = accept (s, NULL, NULL);
的问题
没有找到什么好的办法去处理上面的为题
最后用了一个比较笨的办法
eXosip.j_socketctl = jpipe ();
if (eXosip.j_socketctl == NULL)
return -2;
Sleep(100); //添加的代码
eXosip.j_socketctl_event = jpipe ();
if (eXosip.j_socketctl_event == NULL)
return -3;
后记:
根据推断 可能是在非阻塞的connect 后 链接丢失 然后就被阻塞在了accept中了!