Dolda2000 GitWeb
/
doldaconnect.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fixed up the netcsconn fix.
[doldaconnect.git]
/
daemon
/
net.c
diff --git
a/daemon/net.c
b/daemon/net.c
index
a9238cb
..
121050c
100644
(file)
--- a/
daemon/net.c
+++ b/
daemon/net.c
@@
-361,12
+361,15
@@
void getsock(struct socket *sk)
static void sockdebug(int level, struct socket *sk, char *format, ...)
{
va_list args;
static void sockdebug(int level, struct socket *sk, char *format, ...)
{
va_list args;
+ char *tb;
- if((sk->dbgnm == NULL) || (level
<
sk->dbglvl))
+ if((sk->dbgnm == NULL) || (level
>
sk->dbglvl))
return;
va_start(args, format);
return;
va_start(args, format);
-
vfprintf(stderr,
format, args);
+
tb = vsprintf2(
format, args);
va_end(args);
va_end(args);
+ fprintf(stderr, "%s: %s\n", sk->dbgnm, tb);
+ free(tb);
}
void socksetdebug(struct socket *sk, int level, char *nm, ...)
}
void socksetdebug(struct socket *sk, int level, char *nm, ...)
@@
-382,6
+385,7
@@
void socksetdebug(struct socket *sk, int level, char *nm, ...)
free(tb);
sk->dbglvl = level;
sk->back->dbglvl = level;
free(tb);
sk->dbglvl = level;
sk->back->dbglvl = level;
+ sockdebug(1, sk, "enabled debugging");
}
static void freesock(struct socket *sk)
}
static void freesock(struct socket *sk)
@@
-514,7
+518,7
@@
void *sockgetinbuf(struct socket *sk, size_t *size)
sk->buf.s.bufsize = sk->buf.s.datasize = 0;
sockread(sk);
}
sk->buf.s.bufsize = sk->buf.s.datasize = 0;
sockread(sk);
}
- sockdebug(2, sk, "read %
j
i bytes", *size);
+ sockdebug(2, sk, "read %
z
i bytes", *size);
return(buf);
}
return(buf);
}
@@
-524,7
+528,7
@@
void sockqueue(struct socket *sk, void *data, size_t size)
struct sockaddr *remote;
socklen_t remotelen;
struct sockaddr *remote;
socklen_t remotelen;
- sockdebug(2, sk, "queued %
j
i bytes", size);
+ sockdebug(2, sk, "queued %
z
i bytes", size);
if(size == 0)
return;
if(sk->state == SOCK_STL)
if(size == 0)
return;
if(sk->state == SOCK_STL)
@@
-999,6
+1003,8
@@
struct socket *netcsconn(struct sockaddr *addr, socklen_t addrlen, void (*func)(
memcpy(sk->ufd->d.s.remote = smalloc(addrlen), addr, sk->ufd->d.s.remotelen = addrlen);
sk->back->conncb = func;
sk->back->data = data;
memcpy(sk->ufd->d.s.remote = smalloc(addrlen), addr, sk->ufd->d.s.remotelen = addrlen);
sk->back->conncb = func;
sk->back->data = data;
+ getsock(sk->back);
+ putsock(sk);
if(!connect(sk->ufd->fd, addr, addrlen))
{
sksetstate(sk, SOCK_EST);
if(!connect(sk->ufd->fd, addr, addrlen))
{
sksetstate(sk, SOCK_EST);
@@
-1070,10
+1076,18
@@
static void runbatches(void)
static void cleansocks(void)
{
struct ufd *ufd, *next;
static void cleansocks(void)
{
struct ufd *ufd, *next;
+ int dead;
for(ufd = ufds; ufd != NULL; ufd = next) {
next = ufd->next;
for(ufd = ufds; ufd != NULL; ufd = next) {
next = ufd->next;
- if(ufd->sk && ((ufd->fd < 0) || (sockgetdatalen(ufd->sk) == 0))) {
+ if(ufd->sk) {
+ dead = (ufd->fd < 0);
+ if(ufd->sk->state == SOCK_STL)
+ dead = 1;
+ if((ufd->sk->state == SOCK_EST) && (sockgetdatalen(ufd->sk) == 0))
+ dead = 1;
+ if(!dead)
+ continue;
if(ufd->sk->eos == 1) {
ufd->sk->eos = 2;
closeufd(ufd);
if(ufd->sk->eos == 1) {
ufd->sk->eos = 2;
closeufd(ufd);