#include "network.h"
#include "tree234.h"
-#define BUFFER_GRANULE 512
+#define BUFFER_GRANULE 512
struct Socket_tag {
struct socket_function_table *fn;
}
else
{
- /*
- * Hack inserted to deal with problems with numeric IPs.
- * FIXME: how will this work in IPv6?
- */
+ /*
+ * This must be a numeric IPv4 address because it caused a
+ * success return from inet_addr.
+ */
ret->family = AF_INET;
*canonicalname = host;
}
noise_ultralight(nsent);
if (nsent <= 0) {
err = (nsent < 0 ? WSAGetLastError() : 0);
- if (err == WSAEWOULDBLOCK) {
- /* Perfectly normal: we've sent all we can for the moment. */
+ if ((err==0 && nsent < 0) || err == WSAEWOULDBLOCK) {
+ /*
+ * Perfectly normal: we've sent all we can for the moment.
+ *
+ * (Apparently some WinSocks can return <0 but
+ * leave no error indication - WSAGetLastError() is
+ * called but returns zero - so we check that case
+ * and treat it just like WSAEWOULDBLOCK.)
+ */
s->writable = FALSE;
return;
} else if (nsent == 0 ||
int select_result(WPARAM wParam, LPARAM lParam) {
int ret, open;
DWORD err;
- char buf[BUFFER_GRANULE];
+ char buf[20480]; /* nice big buffer for plenty of speed */
Actual_Socket s;
u_long atmark;
/*
* For Plink: enumerate all sockets currently active.
*/
-SOCKET first_socket(enum234 *e) {
- Actual_Socket s = first234(sktree, e);
+SOCKET first_socket(int *state) {
+ Actual_Socket s;
+ *state = 0;
+ s = index234(sktree, (*state)++);
return s ? s->s : INVALID_SOCKET;
}
-SOCKET next_socket(enum234 *e) {
- Actual_Socket s = next234(e);
+SOCKET next_socket(int *state) {
+ Actual_Socket s = index234(sktree, (*state)++);
return s ? s->s : INVALID_SOCKET;
}