1
--- socket.c 2011-03-23 13:28:36.000000000 +0800
2
+++ socket.c89.c 2011-03-23 13:50:07.000000000 +0800
4
new_sock->adv_mode = 0; /* advance with time */
7
+#pragma warning( disable : 4244 )
8
new_sock->acker_nla.ss_family = family;
9
+#pragma warning( default : 4244 )
12
pgm_mutex_init (&new_sock->source_mutex);
14
/* Stevens: "SO_REUSEADDR has datatype int."
16
pgm_trace (PGM_LOG_ROLE_NETWORK,_("Set socket sharing."));
20
if (SOCKET_ERROR == setsockopt (new_sock->recv_sock, SOL_SOCKET, SO_REUSEADDR, (const char*)&v, sizeof(v)) ||
27
/* request extra packet information to determine destination address on each packet */
28
#ifndef CONFIG_TARGET_WINE
29
pgm_trace (PGM_LOG_ROLE_NETWORK,_("Request socket packet-info."));
31
const sa_family_t recv_family = new_sock->family;
32
if (SOCKET_ERROR == pgm_sockaddr_pktinfo (new_sock->recv_sock, recv_family, TRUE))
35
pgm_sock_strerror_s (errbuf, sizeof (errbuf), save_errno));
44
int*restrict intervals = (int*restrict)optval;
45
*optlen = sock->spm_heartbeat_len;
46
- for (unsigned i = 0; i < sock->spm_heartbeat_len; i++)
49
+ for (i = 0; i < sock->spm_heartbeat_len; i++)
50
intervals[i] = sock->spm_heartbeat_interval[i + 1];
55
@@ -1209,8 +1218,11 @@
56
sock->spm_heartbeat_len = optlen / sizeof (int);
57
sock->spm_heartbeat_interval = pgm_new (unsigned, sock->spm_heartbeat_len + 1);
58
sock->spm_heartbeat_interval[0] = 0;
59
- for (unsigned i = 0; i < sock->spm_heartbeat_len; i++)
62
+ for (i = 0; i < sock->spm_heartbeat_len; i++)
63
sock->spm_heartbeat_interval[i + 1] = ((const int*)optval)[i];
70
if (PGM_UNLIKELY(fecinfo->group_size > fecinfo->block_size))
73
const uint8_t parity_packets = fecinfo->block_size - fecinfo->group_size;
74
/* technically could re-send previous packets */
75
if (PGM_UNLIKELY(fecinfo->proactive_packets > parity_packets))
77
sock->rs_n = fecinfo->block_size;
78
sock->rs_k = fecinfo->group_size;
79
sock->rs_proactive_h = fecinfo->proactive_packets;
86
const struct group_req* gr = optval;
87
/* verify not duplicate group/interface pairing */
88
- for (unsigned i = 0; i < sock->recv_gsr_len; i++)
91
+ for (i = 0; i < sock->recv_gsr_len; i++)
93
if (pgm_sockaddr_cmp ((const struct sockaddr*)&gr->gr_group, (struct sockaddr*)&sock->recv_gsr[i].gsr_group) == 0 &&
94
pgm_sockaddr_cmp ((const struct sockaddr*)&gr->gr_group, (struct sockaddr*)&sock->recv_gsr[i].gsr_source) == 0 &&
100
if (PGM_UNLIKELY(sock->family != gr->gr_group.ss_family))
102
sock->recv_gsr[sock->recv_gsr_len].gsr_interface = gr->gr_interface;
103
@@ -1644,7 +1661,9 @@
106
const struct group_req* gr = optval;
107
- for (unsigned i = 0; i < sock->recv_gsr_len;)
110
+ for (i = 0; i < sock->recv_gsr_len;)
112
if ((pgm_sockaddr_cmp ((const struct sockaddr*)&gr->gr_group, (struct sockaddr*)&sock->recv_gsr[i].gsr_group) == 0) &&
113
/* drop all matching receiver entries */
114
@@ -1661,6 +1680,7 @@
119
if (PGM_UNLIKELY(sock->family != gr->gr_group.ss_family))
121
if (SOCKET_ERROR == pgm_sockaddr_leave_group (sock->recv_sock, sock->family, gr))
122
@@ -1719,7 +1739,9 @@
124
const struct group_source_req* gsr = optval;
125
/* verify if existing group/interface pairing */
126
- for (unsigned i = 0; i < sock->recv_gsr_len; i++)
129
+ for (i = 0; i < sock->recv_gsr_len; i++)
131
if (pgm_sockaddr_cmp ((const struct sockaddr*)&gsr->gsr_group, (struct sockaddr*)&sock->recv_gsr[i].gsr_group) == 0 &&
132
(gsr->gsr_interface == sock->recv_gsr[i].gsr_interface ||
133
@@ -1744,6 +1766,7 @@
138
if (PGM_UNLIKELY(sock->family != gsr->gsr_group.ss_family))
140
if (PGM_UNLIKELY(sock->family != gsr->gsr_source.ss_family))
141
@@ -1766,7 +1789,9 @@
143
const struct group_source_req* gsr = optval;
144
/* verify if existing group/interface pairing */
145
- for (unsigned i = 0; i < sock->recv_gsr_len; i++)
148
+ for (i = 0; i < sock->recv_gsr_len; i++)
150
if (pgm_sockaddr_cmp ((const struct sockaddr*)&gsr->gsr_group, (struct sockaddr*)&sock->recv_gsr[i].gsr_group) == 0 &&
151
pgm_sockaddr_cmp ((const struct sockaddr*)&gsr->gsr_source, (struct sockaddr*)&sock->recv_gsr[i].gsr_source) == 0 &&
152
@@ -1780,6 +1805,7 @@
157
if (PGM_UNLIKELY(sock->family != gsr->gsr_group.ss_family))
159
if (PGM_UNLIKELY(sock->family != gsr->gsr_source.ss_family))
160
@@ -2083,17 +2109,19 @@
162
/* determine IP header size for rate regulation engine & stats */
163
sock->iphdr_len = (AF_INET == sock->family) ? sizeof(struct pgm_ip) : sizeof(struct pgm_ip6_hdr);
164
- pgm_trace (PGM_LOG_ROLE_NETWORK,"Assuming IP header size of %" PRIzu " bytes", sock->iphdr_len);
165
+ pgm_trace (PGM_LOG_ROLE_NETWORK,"Assuming IP header size of %" PRIzu " bytes", (unsigned long)sock->iphdr_len);
167
if (sock->udp_encap_ucast_port) {
168
const size_t udphdr_len = sizeof(struct pgm_udphdr);
169
- pgm_trace (PGM_LOG_ROLE_NETWORK,"Assuming UDP header size of %" PRIzu " bytes", udphdr_len);
170
+ pgm_trace (PGM_LOG_ROLE_NETWORK,"Assuming UDP header size of %" PRIzu " bytes", (unsigned long)udphdr_len);
171
sock->iphdr_len += udphdr_len;
175
const sa_family_t pgmcc_family = sock->use_pgmcc ? sock->family : 0;
176
sock->max_tsdu = (uint16_t)(sock->max_tpdu - sock->iphdr_len - pgm_pkt_offset (FALSE, pgmcc_family));
177
sock->max_tsdu_fragment = (uint16_t)(sock->max_tpdu - sock->iphdr_len - pgm_pkt_offset (TRUE, pgmcc_family));
179
const unsigned max_fragments = sock->txw_sqns ? MIN( PGM_MAX_FRAGMENTS, sock->txw_sqns ) : PGM_MAX_FRAGMENTS;
180
sock->max_apdu = MIN( PGM_MAX_APDU, max_fragments * sock->max_tsdu_fragment );
182
@@ -2139,6 +2167,7 @@
184
/* TODO: different ports requires a new bound socket */
189
struct sockaddr_in s4;
190
@@ -2307,6 +2336,7 @@
192
/* save send side address for broadcasting as source nla */
193
memcpy (&sock->send_addr, &send_addr, pgm_sockaddr_len ((struct sockaddr*)&send_addr));
196
/* rx to nak processor notify channel */
197
if (sock->can_send_data)
198
@@ -2314,7 +2344,7 @@
199
/* setup rate control */
200
if (sock->txw_max_rte > 0) {
201
pgm_trace (PGM_LOG_ROLE_RATE_CONTROL,_("Setting rate regulation to %" PRIzd " bytes per second."),
202
- sock->txw_max_rte);
203
+ (long)sock->txw_max_rte);
204
pgm_rate_create (&sock->rate_control, sock->txw_max_rte, sock->iphdr_len, sock->max_tpdu);
205
sock->is_controlled_spm = TRUE; /* must always be set */
207
@@ -2322,13 +2352,13 @@
209
if (sock->odata_max_rte > 0) {
210
pgm_trace (PGM_LOG_ROLE_RATE_CONTROL,_("Setting ODATA rate regulation to %" PRIzd " bytes per second."),
211
- sock->odata_max_rte);
212
+ (long)sock->odata_max_rte);
213
pgm_rate_create (&sock->odata_rate_control, sock->odata_max_rte, sock->iphdr_len, sock->max_tpdu);
214
sock->is_controlled_odata = TRUE;
216
if (sock->rdata_max_rte > 0) {
217
pgm_trace (PGM_LOG_ROLE_RATE_CONTROL,_("Setting RDATA rate regulation to %" PRIzd " bytes per second."),
218
- sock->rdata_max_rte);
219
+ (long)sock->rdata_max_rte);
220
pgm_rate_create (&sock->rdata_rate_control, sock->rdata_max_rte, sock->iphdr_len, sock->max_tpdu);
221
sock->is_controlled_rdata = TRUE;
223
@@ -2344,6 +2374,8 @@
224
pgm_rwlock_writer_unlock (&sock->lock);
225
pgm_debug ("PGM socket successfully bound.");
232
@@ -2357,11 +2389,14 @@
233
#ifdef CONFIG_TARGET_WINE
234
pgm_return_val_if_fail (sock->recv_gsr_len == 1, FALSE);
236
- for (unsigned i = 0; i < sock->recv_gsr_len; i++)
239
+ for (i = 0; i < sock->recv_gsr_len; i++)
241
pgm_return_val_if_fail (sock->recv_gsr[i].gsr_group.ss_family == sock->recv_gsr[0].gsr_group.ss_family, FALSE);
242
pgm_return_val_if_fail (sock->recv_gsr[i].gsr_group.ss_family == sock->recv_gsr[i].gsr_source.ss_family, FALSE);
245
pgm_return_val_if_fail (sock->send_gsr.gsr_group.ss_family == sock->recv_gsr[0].gsr_group.ss_family, FALSE);
247
if (PGM_UNLIKELY(!pgm_rwlock_writer_trylock (&sock->lock)))
248
@@ -2470,6 +2505,7 @@
253
const bool is_congested = (sock->use_pgmcc && sock->tokens < pgm_fp8 (1)) ? TRUE : FALSE;
256
@@ -2498,6 +2534,7 @@
261
const SOCKET pending_fd = pgm_notify_get_socket (&sock->pending_notify);
262
FD_SET(pending_fd, readfds);
264
@@ -2505,6 +2542,7 @@
271
if (sock->can_send_data && writefds && !is_congested)
272
@@ -2522,6 +2560,7 @@
279
#if defined(CONFIG_HAVE_POLL) || defined(CONFIG_HAVE_WSAPOLL)