Go to the documentation of this file.
   33 #if CONFIG_TLS_PROTOCOL 
   48 #if CONFIG_TLS_PROTOCOL 
   63     if (WSAStartup(MAKEWORD(1,1), &wsaData))
 
   71     int ev = write ? POLLOUT : POLLIN;
 
   72     struct pollfd p = { .fd = fd, .events = ev, .revents = 0 };
 
   81     int64_t wait_start = 0;
 
  126     int err = WSAGetLastError();
 
  132     case WSAEPROTONOSUPPORT:
 
  133         return AVERROR(EPROTONOSUPPORT);
 
  136     case WSAECONNREFUSED:
 
  147     if (addr->sa_family == AF_INET) {
 
  148         return IN_MULTICAST(ntohl(((
struct sockaddr_in *)addr)->sin_addr.s_addr));
 
  150 #if HAVE_STRUCT_SOCKADDR_IN6 
  151     if (addr->sa_family == AF_INET6) {
 
  176     } 
while (timeout <= 0 || runs-- > 0);
 
  188     fd = socket(af, 
type | SOCK_CLOEXEC, proto);
 
  189     if (fd == -1 && errno == EINVAL)
 
  192         fd = socket(af, 
type, proto);
 
  195             if (fcntl(fd, F_SETFD, FD_CLOEXEC) == -1)
 
  202         if (setsockopt(fd, SOL_SOCKET, SO_NOSIGPIPE, &(
int){1}, 
sizeof(
int))) {
 
  215     if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &reuse, 
sizeof(reuse))) {
 
  218     ret = bind(fd, addr, addrlen);
 
  231     struct pollfd lp = { fd, POLLIN, 0 };
 
  262     struct pollfd p = {fd, POLLOUT, 0};
 
  269     while ((
ret = connect(fd, addr, addrlen))) {
 
  281             optlen = 
sizeof(
ret);
 
  282             if (getsockopt (fd, SOL_SOCKET, SO_ERROR, &
ret, &optlen))
 
  290                            "Connection to %s failed (%s), trying next address\n",
 
  291                            h->filename, errbuf);
 
  294                            h->filename, errbuf);
 
  313         if (cur == 
base->ai_next) {
 
  317             next = &
base->ai_next;
 
  337     char hostbuf[100], portbuf[20];
 
  341                     hostbuf, 
sizeof(hostbuf), portbuf, 
sizeof(portbuf),
 
  357                                  struct addrinfo **ptr, 
int timeout_ms,
 
  382                 closesocket(attempt->
fd);
 
  391             closesocket(attempt->
fd);
 
  401 #define NEXT_ATTEMPT_DELAY_MS 200 
  408     struct pollfd pfd[3];
 
  409     int nb_attempts = 0, 
i, j;
 
  413     char errbuf[100], hostbuf[100], portbuf[20];
 
  425     while (nb_attempts > 0 || addrs) {
 
  427         if (nb_attempts < parallel && addrs) {
 
  429                         hostbuf, 
sizeof(hostbuf), portbuf, 
sizeof(portbuf),
 
  434                                              timeout_ms_per_address, 
h,
 
  443                 for (
i = 0; 
i < nb_attempts; 
i++)
 
  444                     closesocket(attempts[
i].fd);
 
  445                 *fd = attempts[nb_attempts].
fd;
 
  448             pfd[nb_attempts].fd = attempts[nb_attempts].
fd;
 
  449             pfd[nb_attempts].events = POLLOUT;
 
  459         if (nb_attempts < parallel && addrs)
 
  460             next_deadline_us = 
FFMIN(next_deadline_us, next_attempt_us);
 
  463                                      &
h->interrupt_callback);
 
  464         if (last_err < 0 && last_err != 
AVERROR(ETIMEDOUT))
 
  468         for (
i = 0; 
i < nb_attempts; 
i++) {
 
  470             if (pfd[
i].revents) {
 
  473                 optlen = 
sizeof(last_err);
 
  474                 if (getsockopt(attempts[
i].fd, SOL_SOCKET, SO_ERROR, &last_err, &optlen))
 
  476                 else if (last_err != 0)
 
  481                     for (j = 0; j < nb_attempts; j++)
 
  483                             closesocket(attempts[j].fd);
 
  484                     *fd = attempts[
i].
fd;
 
  486                                 hostbuf, 
sizeof(hostbuf), portbuf, 
sizeof(portbuf),
 
  501                         hostbuf, 
sizeof(hostbuf), portbuf, 
sizeof(portbuf),
 
  505                                       "failed: %s\n", hostbuf, portbuf, errbuf);
 
  506             closesocket(attempts[
i].fd);
 
  507             memmove(&attempts[
i], &attempts[
i + 1],
 
  508                     (nb_attempts - 
i - 1) * 
sizeof(*attempts));
 
  509             memmove(&pfd[
i], &pfd[
i + 1],
 
  510                     (nb_attempts - 
i - 1) * 
sizeof(*pfd));
 
  515     for (
i = 0; 
i < nb_attempts; 
i++)
 
  516         closesocket(attempts[
i].fd);
 
  518         last_err = 
AVERROR(ECONNREFUSED);
 
  522                h->filename, errbuf);
 
  530     if (!strcmp(pattern, 
"*"))
 
  533     if (pattern[0] == 
'*')
 
  535     if (pattern[0] == 
'.')
 
  537     len_p = strlen(pattern);
 
  538     len_h = strlen(hostname);
 
  542     if (!strcmp(pattern, &hostname[len_h - len_p])) {
 
  545         if (hostname[len_h - len_p - 1] == 
'.')
 
  564         char *sep, *next = 
NULL;
 
  565         start += strspn(start, 
" ,");
 
  566         sep = start + strcspn(start, 
" ,");
 
  
int64_t av_gettime_relative(void)
Get the current time in microseconds since some unspecified starting point.
 
#define AV_LOG_WARNING
Something somehow does not look correct.
 
static void interleave_addrinfo(struct addrinfo *base)
 
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
 
static double cb(void *priv, double x, double y)
 
static int ff_poll_interrupt(struct pollfd *p, nfds_t nfds, int timeout, AVIOInterruptCB *cb)
 
void ff_gnutls_init(void)
 
void ff_log_net_error(void *ctx, int level, const char *prefix)
 
int ff_socket(int af, int type, int proto)
 
#define AV_LOG_VERBOSE
Detailed information.
 
static void print_address_list(void *ctx, const struct addrinfo *addr, const char *title)
 
void ff_network_close(void)
 
#define IN6_IS_ADDR_MULTICAST(a)
 
int ff_network_init(void)
 
Callback for checking whether to abort blocking functions.
 
void ff_gnutls_deinit(void)
 
void ff_openssl_deinit(void)
 
int av_strerror(int errnum, char *errbuf, size_t errbuf_size)
Put a description of the AVERROR code errnum in errbuf.
 
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf type
 
int ff_check_interrupt(AVIOInterruptCB *cb)
Check if the user has requested to interrupt a blocking function associated with cb.
 
int ff_listen_bind(int fd, const struct sockaddr *addr, socklen_t addrlen, int timeout, URLContext *h)
Bind to a file descriptor and poll for a connection.
 
int ff_openssl_init(void)
 
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
 
int ff_listen(int fd, const struct sockaddr *addr, socklen_t addrlen)
Bind to a file descriptor to an address without accepting connections.
 
#define av_assert0(cond)
assert() equivalent, that is always enabled.
 
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
 
static int start_connect_attempt(struct ConnectionAttempt *attempt, struct addrinfo **ptr, int timeout_ms, URLContext *h, void(*customize_fd)(void *, int), void *customize_ctx)
 
int av_usleep(unsigned usec)
Sleep for a period of time.
 
int ff_http_match_no_proxy(const char *no_proxy, const char *hostname)
 
int ff_is_multicast_address(struct sockaddr *addr)
 
int ff_listen_connect(int fd, const struct sockaddr *addr, socklen_t addrlen, int timeout, URLContext *h, int will_try_next)
Connect to a file descriptor and poll for result.
 
int ff_network_wait_fd_timeout(int fd, int write, int64_t timeout, AVIOInterruptCB *int_cb)
This works similarly to ff_network_wait_fd, but waits up to 'timeout' microseconds Uses ff_network_wa...
 
struct sockaddr * ai_addr
 
int ff_accept(int fd, int timeout, URLContext *h)
Poll for a single connection on the passed file descriptor.
 
int ff_socket_nonblock(int socket, int enable)
 
struct addrinfo * ai_next
 
#define i(width, name, range_min, range_max)
 
int ff_network_sleep_interruptible(int64_t timeout, AVIOInterruptCB *int_cb)
Waits for up to 'timeout' microseconds.
 
int ff_connect_parallel(struct addrinfo *addrs, int timeout_ms_per_address, int parallel, URLContext *h, int *fd, void(*customize_fd)(void *, int), void *customize_ctx)
Connect to any of the given addrinfo addresses, with multiple attempts running in parallel.
 
const AVIOInterruptCB int_cb
 
#define FF_ARRAY_ELEMS(a)
 
char * av_strdup(const char *s)
Duplicate a string.
 
static void customize_fd(void *ctx, int fd)
 
#define AVERROR_EXIT
Immediate exit was requested; the called function should not be restarted.
 
#define NEXT_ATTEMPT_DELAY_MS
 
static int match_host_pattern(const char *pattern, const char *hostname)
 
int ff_network_wait_fd(int fd, int write)