2 * Various utilities for ffmpeg system
3 * Copyright (c) 2000, 2001, 2002 Fabrice Bellard
4 * copyright (c) 2002 Francois Revol
6 * This file is part of FFmpeg.
8 * FFmpeg is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
13 * FFmpeg is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with FFmpeg; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 /* needed by inet_aton() */
31 #include "os_support.h"
35 #ifdef HAVE_WINSOCK2_H
37 #elif defined (HAVE_SYS_SELECT_H)
38 #include <sys/select.h>
44 #if !defined(HAVE_INET_ATON)
48 int inet_aton (const char * str
, struct in_addr
* add
)
50 unsigned int add1
= 0, add2
= 0, add3
= 0, add4
= 0;
52 if (sscanf(str
, "%d.%d.%d.%d", &add1
, &add2
, &add3
, &add4
) != 4)
55 if (!add1
|| (add1
|add2
|add3
|add4
) > 255) return 0;
57 add
->s_addr
=(add4
<<24)+(add3
<<16)+(add2
<<8)+add1
;
61 #endif /* !defined(HAVE_INET_ATON) */
63 /* resolve host with also IP address parsing */
64 int resolve_host(struct in_addr
*sin_addr
, const char *hostname
)
68 if (!inet_aton(hostname
, sin_addr
)) {
69 hp
= gethostbyname(hostname
);
72 memcpy(sin_addr
, hp
->h_addr_list
[0], sizeof(struct in_addr
));
77 int ff_socket_nonblock(int socket
, int enable
)
79 #ifdef HAVE_WINSOCK2_H
80 return ioctlsocket(socket
, FIONBIO
, &enable
);
83 return fcntl(socket
, F_SETFL
, fcntl(socket
, F_GETFL
) | O_NONBLOCK
);
85 return fcntl(socket
, F_SETFL
, fcntl(socket
, F_GETFL
) & ~O_NONBLOCK
);
88 #endif /* CONFIG_NETWORK */
90 #ifdef CONFIG_FFSERVER
92 int poll(struct pollfd
*fds
, nfds_t numfds
, int timeout
)
101 #ifdef HAVE_WINSOCK2_H
102 if (numfds
>= FD_SETSIZE
) {
110 FD_ZERO(&exception_set
);
113 for(i
= 0; i
< numfds
; i
++) {
116 #ifndef HAVE_WINSOCK2_H
117 if (fds
[i
].fd
>= FD_SETSIZE
) {
123 if (fds
[i
].events
& POLLIN
) FD_SET(fds
[i
].fd
, &read_set
);
124 if (fds
[i
].events
& POLLOUT
) FD_SET(fds
[i
].fd
, &write_set
);
125 if (fds
[i
].events
& POLLERR
) FD_SET(fds
[i
].fd
, &exception_set
);
132 /* Hey!? Nothing to poll, in fact!!! */
136 rc
= select(n
+1, &read_set
, &write_set
, &exception_set
, NULL
);
140 tv
.tv_sec
= timeout
/ 1000;
141 tv
.tv_usec
= 1000 * (timeout
% 1000);
142 rc
= select(n
+1, &read_set
, &write_set
, &exception_set
, &tv
);
148 for(i
= 0; i
< (nfds_t
) n
; i
++) {
151 if (FD_ISSET(fds
[i
].fd
, &read_set
)) fds
[i
].revents
|= POLLIN
;
152 if (FD_ISSET(fds
[i
].fd
, &write_set
)) fds
[i
].revents
|= POLLOUT
;
153 if (FD_ISSET(fds
[i
].fd
, &exception_set
)) fds
[i
].revents
|= POLLERR
;
158 #endif /* HAVE_POLL_H */
159 #endif /* CONFIG_FFSERVER */