[FFmpeg-devel] MinGW network support

Michel Bardiaux mbardiaux
Mon May 21 17:36:25 CEST 2007


Alex Beregszaszi wrote:
> Hi,
> 
>>> Without this hack, ffserver is not working. Can you give me an
>>> explanation why does Winsock returns socket numbers like 1754 and 1800?
>>> Can I influence this to return normal socket numbers starting from 3 ?
>>>
>> I would venture the guess these are actual port numbers. It seems 
> 
> Yes, it is likely a port number.
> 
>> unlikely you can force socket() to return 'normal' values, because it is 
>> rather clear from the winsock documentation that sockets are *NOT* 
>> 'files' but entities with their own API.
> 
> However, then why don't they implement select() working with this idea?
> It does not work right with such socket numbers.

select() on Windows works right *if* you follow the guidelines found in 
the official winsock doc:

<QUOTE>
Four macros are defined in the header file Winsock2.h for manipulating 
and checking the descriptor sets. The variable FD_SETSIZE determines the 
maximum number of descriptors in a set. (The default value of FD_SETSIZE 
is 64, which can be modified by defining FD_SETSIZE to another value 
before including Winsock2.h.) Internally, socket handles in an fd_set 
structure are not represented as bit flags as in Berkeley Unix. Their 
data representation is opaque. Use of these macros will maintain 
software portability between different socket environments. The macros 
to manipulate and check fd_set contents are:

FD_CLR(s, *set)
Removes the descriptor s from set.
FD_ISSET(s, *set)
Nonzero if s is a member of the set. Otherwise, zero.
FD_SET(s, *set)
Adds descriptor s to set.
FD_ZERO(*set)
Initializes the set to the NULL set.
</QUOTE>

Is this broken? Rigorously, no. Is this an extreme case of NIH syndrome? 
I would say yes. They *could* have kept the winsock implementation more 
compatible with BSD down to the deepest internals, after all they 
managed it for the C library, and for a lot of nix-like calls like open().

In any case, *dont* expect select() to work on anything else then 
sockets on MS-W. If ffserver (or any other) depends on select on 
non-socket (and on MS-W pipes are not sockets!), then it will be 
difficult to port to MINGW.

Greetings,
-- 
Michel Bardiaux
R&D Director
T +32 [0] 2 790 29 41
F +32 [0] 2 790 29 02
E mailto:mbardiaux at mediaxim.be

Mediaxim NV/SA
Vorstlaan 191 Boulevard du Souverain
Brussel 1160 Bruxelles
http://www.mediaxim.com/




More information about the ffmpeg-devel mailing list