Mercurial > pidgin.yaz
comparison libpurple/protocols/zephyr/ZOpenPort.c @ 15374:5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
author | Sean Egan <seanegan@gmail.com> |
---|---|
date | Sat, 20 Jan 2007 02:32:10 +0000 |
parents | |
children | a8cc50c2279f |
comparison
equal
deleted
inserted
replaced
15373:f79e0f4df793 | 15374:5fe8042783c1 |
---|---|
1 /* This file is part of the Project Athena Zephyr Notification System. | |
2 * It contains source for the ZOpenPort function. | |
3 * | |
4 * Created by: Robert French | |
5 * | |
6 * Copyright (c) 1987 by the Massachusetts Institute of Technology. | |
7 * For copying and distribution information, see the file | |
8 * "mit-copyright.h". | |
9 */ | |
10 | |
11 #include "internal.h" | |
12 #ifdef WIN32 | |
13 #include <winsock2.h> | |
14 #else | |
15 #include <sys/socket.h> | |
16 #endif | |
17 | |
18 Code_t ZOpenPort(port) | |
19 unsigned short *port; | |
20 { | |
21 struct sockaddr_in bindin; | |
22 socklen_t len; | |
23 | |
24 (void) ZClosePort(); | |
25 | |
26 if ((__Zephyr_fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { | |
27 __Zephyr_fd = -1; | |
28 return (errno); | |
29 } | |
30 | |
31 #ifdef SO_BSDCOMPAT | |
32 { | |
33 int on = 1; | |
34 | |
35 setsockopt(__Zephyr_fd, SOL_SOCKET, SO_BSDCOMPAT, (char *)&on, | |
36 sizeof(on)); | |
37 } | |
38 #endif | |
39 | |
40 bindin.sin_family = AF_INET; | |
41 | |
42 if (port && *port) | |
43 bindin.sin_port = *port; | |
44 else | |
45 bindin.sin_port = 0; | |
46 | |
47 bindin.sin_addr.s_addr = INADDR_ANY; | |
48 | |
49 if (bind(__Zephyr_fd, (struct sockaddr *)&bindin, sizeof(bindin)) < 0) { | |
50 if (errno == EADDRINUSE && port && *port) | |
51 return (ZERR_PORTINUSE); | |
52 else | |
53 return (errno); | |
54 } | |
55 | |
56 if (!bindin.sin_port) { | |
57 len = sizeof(bindin); | |
58 if (getsockname(__Zephyr_fd, (struct sockaddr *)&bindin, &len)) | |
59 return (errno); | |
60 } | |
61 | |
62 __Zephyr_port = bindin.sin_port; | |
63 __Zephyr_open = 1; | |
64 | |
65 if (port) | |
66 *port = bindin.sin_port; | |
67 | |
68 return (ZERR_NONE); | |
69 } |