irc 봇 socket_select 함수 문제 해결 While이 에 작성. 460번 읽힘.
function process() { while (1) { $botSocketArray = $this->getIrcSocketList(); // print_r($botSocketArray); if ($bufSockSelect=@socket_select($botSocketArray['socket'], $write, $except = NULL, 1)) { foreach ($botSocketArray['class'] as $class) { if (!@socket_recv($class->socket,$buf,512,MSG_PEEK)) continue; if ($class->socktype == “irc”) { // irc소켓일 경우
이런식으로 애매하게 쓰고 있던 socket_select 함수를,
function process() { while (1) { $botSocketArray = $this->getIrcSocketList(); if (!$botSocketArray) return error(“어떤 봇도 실행중이지 않습니다.”); foreach ($botSocketArray['class'] as $class) { $fd = array( $class->socket ); if (!$bufSockSelect=@socket_select($fd, $write, $except = NULL, 0)) continue; if (!@socket_recv($class->socket,$buf,512,MSG_PEEK)) continue; if ($class->socktype == “irc”) { // irc소켓일 경우
이런식으로 좀더 확실하게 바꿔주었더니 잘 동작 한다.
처음의 소스를 썼을때 socket_select 의 리턴이 2이면 Connnection Refused 가 나야하는데 왜 자꾸 정상 접속인가 했더니 함수를 잘못 쓴거였다.
