今天在调BUG发现一个很奇怪的问题,描述如下:
void file_do_transmit_firmware(evutil_socket_t fd, short event, void *arg)
{
struct sockaddr_in peeraddr;
pthread_t thread_id;
socklen_t socklen;
int s, clientfd;
clientfd = accept(fd, (struct sockaddr*)&peeraddr, &socklen);
if (clientfd < 0) {
log_debug("file: accept failed: %s\n", strerror(errno));
return;
}
if (CurrConnected >= MaxConnection || !peer_find(peeraddr.sin_addr)) {
log_debug("file: current connect peer[%d] lager then MaxConnection[%d], or there is no client %s, fd: %d\n",\
CurrConnected, MaxConnection, system_inet_ntoa(peeraddr.sin_addr), clientfd);
close(clientfd);
return ;
}
CurrConnected++;
peer_unset_flag(peeraddr.sin_addr, BIN_SENDED);
log_debug("file: accept non-dr %s, cur num:%d, fd: %d\n", system_inet_ntoa(peeraddr.sin_addr), CurrConnected, clientfd);
s = pthread_create(&thread_id, NULL, (void *)file_transmit_firmware_thread, (void *)clientfd);
if (s != 0) {
log_debug("pthread create failed: %s\n", strerror(errno));
if (CurrConnected > 0) CurrConnected--;
close(clientfd);
system_track_exit(EXIT_THREAD);
}
return;
}void file_do_tran