From owner-FreeBSD-net-jp@jp.freebsd.org  Thu Nov 15 16:06:38 2001
Received: (from daemon@localhost)
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) id QAA05485;
	Thu, 15 Nov 2001 16:06:38 +0900 (JST)
	(envelope-from owner-FreeBSD-net-jp@jp.FreeBSD.org)
Received: from ewey.excite.com (ewey-rwcmta.excite.com [198.3.99.191])
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) with ESMTP id QAA05480
	for <FreeBSD-net-jp@jp.freebsd.org>; Thu, 15 Nov 2001 16:06:38 +0900 (JST)
	(envelope-from scride@excite.co.jp)
From: scride@excite.co.jp
Received: from almond.excite.com ([199.172.148.82]) by ewey.excite.com
          (InterMail vM.4.01.02.39 201-229-119-122) with ESMTP
          id <20011115070602.PWEO29533.ewey.excite.com@almond.excite.com>
          for <FreeBSD-net-jp@jp.freebsd.org>;
          Wed, 14 Nov 2001 23:06:02 -0800
Message-ID: <25234975.1005807962071.JavaMail.imail@almond.excite.com>
Date: Wed, 14 Nov 2001 23:06:01 -0800 (PST)
To: FreeBSD-net-jp@jp.freebsd.org
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit
X-Mailer: ExciteMail
X-Sender-Ip: 203.137.121.95
Reply-To: FreeBSD-net-jp@jp.freebsd.org
Precedence: list
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+010328
X-Sequence: FreeBSD-net-jp 3451
Subject: [FreeBSD-net-jp 3451] SO_RCVTIMEO =?ISO-2022-JP?B?GyRCJCwbKEI=?=
 =?ISO-2022-JP?B?GyRCJT8lJCVgJSIlJiVIJDckSiQkJE4kTzI/OE4bKEI=?=
 =?ISO-2022-JP?B?GyRCISkbKEI=?=
Errors-To: owner-FreeBSD-net-jp@jp.freebsd.org
Sender: owner-FreeBSD-net-jp@jp.freebsd.org
X-Originator: scride@excite.co.jp



FreeBSD4.4$B$G(Bsetsockopt$B$G(BSO_RCVTIMEO$B$r;XDj$7$?%=%1%C%H$N(B
recvfrom$B$d(Brecv$B$,%?%$%`%"%&%H$7$J$$$N$O2?8N$J$N$G$7$g$&$+!)(B
FreeBSD4.3$B$G;n$7$F$bF1$8>I>u$G$9!#(B

by scride

$B;29M$H$7$F0J2<$N%=!<%9$rIU$1$^$9!#(B


#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <pthread.h>
#include <errno.h>
#include <stdio.h>
#include <string.h>

#include <unistd.h>

int main()
{
        int sock;
        int ret;

        // Create Socket
        sock = socket(AF_INET, SOCK_DGRAM, 0);
        if(sock < 0){
                printf("socket: error(%d)\n", errno);
                return -1;
        }

        // Option
        int opt;
        ret = setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
        if(ret < 0){
                printf("setsockopt: error(%d)\n", errno);
                return -2;
        }
        struct timeval tv;
        tv.tv_sec = 1;
        tv.tv_usec = 1;
        ret = setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv));
        if(ret < 0){
                printf("setsockopt: error(%d)\n", errno);
                return -3;
        }

        // Bind socket
        struct sockaddr_in addr;
        addr.sin_family = AF_INET;
        addr.sin_addr.s_addr = htonl(INADDR_ANY);
        addr.sin_port = htons(6001);
        ret = bind(sock, (struct sockaddr *)&addr, sizeof(addr));
        if(ret < 0){
                printf("Error:bind (%d)\n", errno);
                return -4;
        }

        printf("ready to recvfrom\n");

        while(1){
                char buff[256];
                int byte;
                sockaddr_in remote_addr;
                int remote_addr_len;

                // Recvfrom Socket
                memset(&remote_addr, 0, sizeof(remote_addr));
                remote_addr_len = sizeof(remote_addr);
                byte = recvfrom(sock, buff, 255, 0, (sockaddr*)&remote_addr,
(socklen_t*)&remote_addr_len);
                if(byte < 0){
                        if(errno == EWOULDBLOCK){
                                printf(".\n");
                                continue;
                        }else{
                                printf("recvfrom: error(%d)\n", errno);
                                break;
                        }
                }else if(byte == 0){
                        printf("connection closed\n");
                        break;
                }
                buff[byte] = '\0';
                printf("recv %d bytes from %s:%d\n", byte,
inet_ntoa(remote_addr.sin_addr), remote_addr.sin_port);

        }
        close(sock);
        return 0;
}



 





_______________________________________________________


