… | |
… | |
62 | } |
62 | } |
63 | else |
63 | else |
64 | return; |
64 | return; |
65 | } |
65 | } |
66 | |
66 | |
67 | if (socket_ev.poll () & PE_W) |
67 | if (socket_ev.poll () & EV_WRITE) |
68 | return; |
68 | return; |
69 | |
69 | |
70 | last_send = NOW; |
70 | last_send = NOW; |
71 | write_outputbuffer (); |
71 | write_outputbuffer (); |
72 | } |
72 | } |
… | |
… | |
99 | // just retry |
99 | // just retry |
100 | } |
100 | } |
101 | else if (errno == EAGAIN) |
101 | else if (errno == EAGAIN) |
102 | { |
102 | { |
103 | // delay till ready |
103 | // delay till ready |
104 | socket_ev.poll (socket_ev.poll () | PE_W); |
104 | socket_ev.poll (socket_ev.poll () | EV_WRITE); |
105 | socket_ev.start (); |
105 | socket_ev.start (); |
106 | return; |
106 | return; |
107 | } |
107 | } |
108 | else |
108 | else |
109 | { |
109 | { |
… | |
… | |
111 | destroy (); |
111 | destroy (); |
112 | return; |
112 | return; |
113 | } |
113 | } |
114 | } |
114 | } |
115 | |
115 | |
116 | socket_ev.poll (socket_ev.poll () & ~PE_W); |
116 | socket_ev.poll (socket_ev.poll () & ~EV_WRITE); |
117 | } |
117 | } |
118 | |
118 | |
119 | /****************************************************************************** |
119 | /****************************************************************************** |
120 | * |
120 | * |
121 | * Start of read routines. |
121 | * Start of read routines. |
… | |
… | |
293 | send_packet_printf ("drawinfo %d ERROR: command '%s' not supported.", NDI_RED | NDI_REPLY, (char *)inbuf + 2); |
293 | send_packet_printf ("drawinfo %d ERROR: command '%s' not supported.", NDI_RED | NDI_REPLY, (char *)inbuf + 2); |
294 | next_packet: |
294 | next_packet: |
295 | skip_packet (pkt_len); |
295 | skip_packet (pkt_len); |
296 | |
296 | |
297 | // input buffer has space again |
297 | // input buffer has space again |
298 | socket_ev.poll (socket_ev.poll () | PE_R); |
298 | socket_ev.poll (socket_ev.poll () | EV_READ); |
299 | |
299 | |
300 | return true; |
300 | return true; |
301 | } |
301 | } |
302 | |
302 | |
303 | // callback called when socket is either readable or writable |
303 | // callback called when socket is either readable or writable |
304 | void |
304 | void |
305 | client::socket_cb (iow &w, int got) |
305 | client::socket_cb (iow &w, int revents) |
306 | { |
306 | { |
307 | //TODO remove when we have better socket cleanup logic |
307 | //TODO remove when we have better socket cleanup logic |
308 | if (destroyed ()) |
308 | if (destroyed ()) |
309 | { |
309 | { |
310 | socket_ev.poll (0); |
310 | socket_ev.poll (0); |
311 | return; |
311 | return; |
312 | } |
312 | } |
313 | |
313 | |
314 | if (got & PE_W) |
314 | if (revents & EV_WRITE) |
315 | { |
315 | { |
316 | write_outputbuffer (); |
316 | write_outputbuffer (); |
317 | |
317 | |
318 | if (!outputbuffer.len) |
318 | if (!outputbuffer.len) |
319 | socket_ev.poll (socket_ev.poll () & ~PE_W); |
319 | socket_ev.poll (socket_ev.poll () & ~EV_WRITE); |
320 | } |
320 | } |
321 | |
321 | |
322 | if (got & PE_R) |
322 | if (revents & EV_READ) |
323 | { |
323 | { |
324 | //TODO: rate-limit tcp connection in better ways, important |
324 | //TODO: rate-limit tcp connection in better ways, important |
325 | |
325 | |
326 | int amount = sizeof (inbuf) - inbuf_len; |
326 | int amount = sizeof (inbuf) - inbuf_len; |
327 | |
327 | |
328 | if (!amount) |
328 | if (!amount) |
329 | { |
329 | { |
330 | // input buffer full |
330 | // input buffer full |
331 | socket_ev.poll (socket_ev.poll () & ~PE_R); |
331 | socket_ev.poll (socket_ev.poll () & ~EV_READ); |
332 | return; |
332 | return; |
333 | } |
333 | } |
334 | |
334 | |
335 | amount = read (fd, inbuf + inbuf_len, amount); |
335 | amount = read (fd, inbuf + inbuf_len, amount); |
336 | |
336 | |