2009-09-24 06:58:01

by KV Pavuram

[permalink] [raw]
Subject: Socket vs File descriptor

Hi,

Is there any ioctl call to determine if a given descriptor is a file descriptor or a socket descriptor.

Similarly, is there a way to find out a socket descriptor type ie.e if it is SOCK_STREAM, or SOCK_DGRAM type.

Thanks
Pav


See the Web's breaking stories, chosen by people like you. Check out Yahoo! Buzz. http://in.buzz.yahoo.com/


2009-09-24 07:10:13

by Willy Tarreau

[permalink] [raw]
Subject: Re: Socket vs File descriptor

On Wed, Sep 23, 2009 at 11:51:19PM -0700, KV Pavuram wrote:
> Hi,
>
> Is there any ioctl call to determine if a given descriptor is a file descriptor or a socket descriptor.
>
> Similarly, is there a way to find out a socket descriptor type ie.e if it is SOCK_STREAM, or SOCK_DGRAM type.

You should look at getsockopt(), getsockname(), etc... I'm pretty
sure that one of those will offer you exactly what you need. Also,
look at the error codes. Sometimes you can rely on them because you
have different types depending on whether the FD you point to is
not a socket or is a socket of invalid type.

Regards,
Willy

2009-09-24 08:04:48

by YOSHIFUJI Hideaki

[permalink] [raw]
Subject: Re: Socket vs File descriptor

KV Pavuram wrote:
> Is there any ioctl call to determine if a given descriptor is a file descriptor or a socket descriptor.
>
> Similarly, is there a way to find out a socket descriptor type ie.e if it is SOCK_STREAM, or SOCK_DGRAM type.

Maybe "lsof" command is your friend.

Or, depending on your purpose, you can use
getsockopt(), listen() etc. to get error
(e.g. ENOTSOCK) to test the type.

--yoshfuji