阅读背景:

多线程与inet_ntoa

来源:互联网 

今天在调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



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: