~ubuntu-branches/ubuntu/wily/xmms2/wily

« back to all changes in this revision

Viewing changes to src/plugins/airplay/net_utils.c

  • Committer: Bazaar Package Importer
  • Author(s): Benjamin Drung
  • Date: 2008-07-04 16:23:34 UTC
  • mfrom: (1.1.5 upstream) (6.1.1 lenny)
  • Revision ID: james.westby@ubuntu.com-20080704162334-b3esbkcapt8wbrk4
Tags: 0.5DrLecter-2ubuntu1
* Merge from debian unstable (LP: #241098), remaining changes:
  + debian/control:
    + Update Maintainer field
    + add lpia to xmms2-plugin-alsa supported architectures
    + Added liba52-0.7.4-dev to build depends
  + debian/rules: Added patch, patch-stamp and unpatch
  + changed 01_gcc4.3.patch:
    + src/include/xmmsclient/xmmsclient++/helpers.h: Added #include <climits>
* New upstream relase fixes LP: #212566, #222341

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include "net_utils.h"
 
2
 
 
3
char *
 
4
get_local_addr (int fd)
 
5
{
 
6
        struct sockaddr_in addr;
 
7
        int ret;
 
8
        socklen_t len = sizeof (addr);
 
9
 
 
10
        ret = getsockname (fd, (struct sockaddr *) &addr, &len);
 
11
 
 
12
        return inet_ntoa (addr.sin_addr);
 
13
}
 
14
 
 
15
int
 
16
set_sock_nonblock (int sockfd)
 
17
{
 
18
        int flags;
 
19
        flags = fcntl (sockfd, F_GETFL, 0);
 
20
        return fcntl (sockfd, F_SETFL, flags | O_NONBLOCK);
 
21
}
 
22
 
 
23
int
 
24
tcp_open ()
 
25
{
 
26
        int sock_fd;
 
27
        sock_fd = socket (AF_INET, SOCK_STREAM, 0);
 
28
        return sock_fd;
 
29
}
 
30
 
 
31
int
 
32
tcp_connect (int sock_fd, const char *host, unsigned int port)
 
33
{
 
34
        struct sockaddr_in addr;
 
35
        struct hostent *h;
 
36
        int ret;
 
37
 
 
38
        h = gethostbyname (host);
 
39
        if (h) {
 
40
                addr.sin_family = h->h_addrtype;
 
41
                memcpy ((char *) &addr.sin_addr.s_addr, h->h_addr_list[0], h->h_length);
 
42
        }else{
 
43
                addr.sin_family = AF_INET;
 
44
                addr.sin_addr.s_addr = inet_addr (host);
 
45
                if (addr.sin_addr.s_addr == 0xFFFFFFFF) {
 
46
                        return -1;
 
47
                }
 
48
        }
 
49
        addr.sin_port = htons (port);
 
50
        ret = connect (sock_fd, (struct sockaddr *)&addr, sizeof (struct sockaddr));
 
51
 
 
52
        return ret;
 
53
}
 
54
 
 
55
int
 
56
tcp_write (int fd, const char *buf, int n)
 
57
{
 
58
        size_t nleft;
 
59
        ssize_t nwritten = 0;
 
60
        const char *ptr;
 
61
        int ret;
 
62
 
 
63
        ptr = buf;
 
64
        nleft = n;
 
65
        while (nleft > 0) {
 
66
                ret = write (fd, ptr, nleft);
 
67
                if (ret <= 0) {
 
68
                        if (ret < 0 && errno == EWOULDBLOCK) {
 
69
                                break;
 
70
                        } else if (ret < 0 && errno == EINTR) {
 
71
                                continue;
 
72
                        } else {
 
73
                                return -1;
 
74
                        }
 
75
                }
 
76
                nwritten += ret;
 
77
                nleft -= ret;
 
78
                ptr   += ret;
 
79
        }
 
80
        return nwritten;
 
81
}