LINUX.ORG.RU

Сообщения and73y

 

accept() не прерывается сигналом

Документация говорит, что accept() должен прерваться после выполнения обработчика сигнала и вернуть -1. По какой причине accept() может не прерываться сигналом?

if (!_tcp_inited){
		int bind_res, listen_res;
		_sock = socket(AF_INET, SOCK_STREAM, 0);

		if (_sock < 0) return SYSTEM_ERR;
		struct sockaddr_in addr;//, client_addr;
		bzero(&addr, sizeof(addr));	
		addr.sin_family = AF_INET;
		addr.sin_port = _client->GetTCPPort();
		addr.sin_addr.s_addr = INADDR_ANY;
		bind_res = bind(_sock, (sockaddr*)&addr, sizeof(addr));
		if (bind_res != 0) return SYSTEM_ERR;
		listen_res = listen(_sock, 2);
		if (listen_res != 0) return SYSTEM_ERR;
		_tcp_inited = true;
	}
	
	struct sockaddr_in client_addr;
	socklen_t client_addr_len = sizeof(client_addr);
	printf("accept start\n");
	_fd = accept(_sock, (sockaddr*)&client_addr, &client_addr_len);
	
	printf("accept finish\n");
	//printf("accept ends\n");
	if (_fd < 0) return SYSTEM_ERR;
		
	return OK;

Подписка на событие:

void BCPDaemon::IntrHandler(int signum){
	_sig_stop = 1;
}

//TODO:write into log
int BCPDaemon::Init(){
	bsd_signal(SIGTSTP, SIG_IGN);
	bsd_signal(SIGINT, BCPDaemon::IntrHandler);
...
}

Система - Slackware 12.

and73y
()

RSS подписка на новые темы