Akinator for IRC Bot 2010-02-22 15:06:51에 작성. 1,870번 읽힘.

사용자 삽입 이미지
Akinator 가 아이폰버전으로 어플이 나왔길레 패킷을 분석해서 irc봇에다가 갖다붙여봤습니다.

irc 봇 socket_select 함수 문제 해결 2010-02-10 20:51:43에 작성. 599번 읽힘.

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 가 나야하는데 왜 자꾸 정상 접속인가 했더니 함수를 잘못 쓴거였다.