*** empty log message ***
This commit is contained in:
@@ -4,61 +4,63 @@
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
int CocConnect(CocConn *conn, int allowConnRefused) {
|
||||
int i;
|
||||
struct sockaddr_in sadr;
|
||||
|
||||
ERR_I(CocCreateSockAdr(&sadr, conn->host, conn->port));
|
||||
ERR_SI(conn->fd=socket(AF_INET, SOCK_STREAM, 0));
|
||||
i = 1;
|
||||
ERR_SI(setsockopt(conn->fd,SOL_SOCKET,SO_REUSEADDR,&i,sizeof(int))); /* allow quick port reuse */
|
||||
i=connect(conn->fd, (struct sockaddr *)&sadr, sizeof(sadr));
|
||||
if (i<0) {
|
||||
if (allowConnRefused && errno==ECONNREFUSED) return(1);
|
||||
ERR_COD(errno);
|
||||
}
|
||||
return(0);
|
||||
OnError: return(-1);
|
||||
}
|
||||
|
||||
int CocOpen(CocConn *conn)
|
||||
{
|
||||
int i, cnt, try, port, tryConn, tmo;
|
||||
struct sockaddr_in sadr;
|
||||
char *p, *q;
|
||||
int i, try, tmo;
|
||||
|
||||
try=2;
|
||||
tryConn=1;
|
||||
tmo=0;
|
||||
ERR_I(i=CocConnect(conn, conn->startcmd[0]!='\0'));
|
||||
if (i==0) return(0);
|
||||
|
||||
printf("%s\n", conn->startcmd);
|
||||
ERR_I(system(conn->startcmd));
|
||||
|
||||
try=15;
|
||||
tmo=100; /* wait total ca. 10 sec. for 15 tries */
|
||||
while (try>0) {
|
||||
try--;
|
||||
while (tryConn>0) {
|
||||
port=CocPORT;
|
||||
cnt=CocPORTS;
|
||||
tryConn--;
|
||||
while (cnt>0) {
|
||||
ERR_SI(conn->fd=socket(AF_INET, SOCK_STREAM, 0));
|
||||
ERR_I(CocCreateSockAdr(&sadr, conn->host, port));
|
||||
i=connect(conn->fd, (struct sockaddr *)&sadr, sizeof(sadr));
|
||||
if (i>=0) return(0);
|
||||
if (errno!=ECONNREFUSED) { ERR_COD(errno); }
|
||||
port++; cnt--;
|
||||
}
|
||||
util_delay(tmo); tmo+=100;
|
||||
}
|
||||
if (conn->startcmd[0]=='\0' || try<=0) { ERR_COD(ECONNREFUSED); }
|
||||
p=conn->startcmd;
|
||||
q=strchr(p,' ');
|
||||
while (q!=NULL) {
|
||||
p=q+1;
|
||||
q=strchr(p,' ');
|
||||
};
|
||||
printf("start server %s\n", p);
|
||||
ERR_I(system(conn->startcmd));
|
||||
util_delay(100); tmo=200;
|
||||
tryConn=5;
|
||||
util_delay(tmo); tmo=tmo*5/4;
|
||||
ERR_I(i=CocConnect(conn, try>0));
|
||||
if (i==0) return(0);
|
||||
}
|
||||
ERR_COD(ECONNREFUSED);
|
||||
ERR_MSG("error in CocConnect");
|
||||
OnError: return(-1);
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
void CocInitClient(CocConn *conn, char *host, char *magic, int bufsize, char *startcmd)
|
||||
{ void *e;
|
||||
|
||||
int CocInitClient(CocConn *conn, char *host, int port, char *magic, int bufsize, char *startcmd) {
|
||||
assert(conn!=NULL);
|
||||
if (bufsize==0) bufsize=1024;
|
||||
conn->cmdbuf=buf_create(bufsize);
|
||||
conn->resbuf=buf_create(bufsize);
|
||||
conn->port=port;
|
||||
str_copy(conn->host, host);
|
||||
str_copy(conn->magic, magic);
|
||||
str_copy(conn->startcmd, startcmd);
|
||||
conn->fd=-1;
|
||||
conn->varList=NULL;
|
||||
CocVarList(&conn->varList);
|
||||
ERR_I(CocOpen(conn));
|
||||
ERR_I(CocSendMagic(conn, conn->magic));
|
||||
return(0);
|
||||
OnError: return(-1);
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
@@ -102,6 +104,7 @@ int CocCmd(CocConn *conn, const char *rwList)
|
||||
char nam[32];
|
||||
CocVar *var;
|
||||
|
||||
assert(conn!=NULL);
|
||||
buf_put_start(conn->cmdbuf);
|
||||
s=rwList;
|
||||
setmode=0;
|
||||
@@ -117,7 +120,7 @@ int CocCmd(CocConn *conn, const char *rwList)
|
||||
assert(i<32);
|
||||
str_ncpy(nam, s, i+1);
|
||||
if (setmode) {
|
||||
if (nam[i-1]==']') { nam[i-1]='\0'; setmode=0; }
|
||||
if (nam[i-1]==']') { i--; nam[i]='\0'; setmode=0; }
|
||||
buf_put_str(conn->cmdbuf, nam);
|
||||
ERR_I(CocPutVar(conn->varList, conn->cmdbuf, nam));
|
||||
if (!setmode) buf_put_str(conn->cmdbuf, "]");
|
||||
@@ -159,9 +162,10 @@ int CocCmd(CocConn *conn, const char *rwList)
|
||||
setmode=1;
|
||||
}
|
||||
i=t-s;
|
||||
if (!setmode) {
|
||||
if (setmode) {
|
||||
if (*(t-1)==']') setmode=0;
|
||||
} else {
|
||||
str_ncpy(nam, s, i+1);
|
||||
if (nam[i-1]==']') { nam[i-1]='\0'; setmode=0; }
|
||||
ERR_I(CocGetVar(conn->varList, conn->resbuf, nam));
|
||||
}
|
||||
s=t+1;
|
||||
@@ -173,6 +177,7 @@ int CocCmd(CocConn *conn, const char *rwList)
|
||||
}
|
||||
|
||||
void CocCloseClient(CocConn *conn) {
|
||||
assert(conn!=NULL);
|
||||
close(conn->fd);
|
||||
buf_free(conn->cmdbuf);
|
||||
buf_free(conn->resbuf);
|
||||
|
||||
Reference in New Issue
Block a user