mirror of
https://repo.or.cz/socat.git
synced 2025-01-09 14:32:33 +00:00
xioopen failed to handle some read/write combinations
This commit is contained in:
parent
2b48a7daea
commit
357a7f7984
1 changed files with 7 additions and 2 deletions
|
@ -422,7 +422,7 @@ xiofile_t *socat_open(const char *addrs0, int dirs, int flags) {
|
||||||
int srchleftA, srchrightA, srchleftB=0, srchrightB=0;
|
int srchleftA, srchrightA, srchleftB=0, srchrightB=0;
|
||||||
xiofile_t *xfd0; /* what we return */
|
xiofile_t *xfd0; /* what we return */
|
||||||
xiofile_t *xfd1; /* left hand of engine */
|
xiofile_t *xfd1; /* left hand of engine */
|
||||||
xiofile_t *xfd2; /* return by sub address */
|
xiofile_t *xfd2; /* returned by sub address */
|
||||||
int dirs0, dirs1, dirs2; /* the data directions for respective xfd */
|
int dirs0, dirs1, dirs2; /* the data directions for respective xfd */
|
||||||
int xfd0shut;
|
int xfd0shut;
|
||||||
int xfd0close;
|
int xfd0close;
|
||||||
|
@ -433,6 +433,8 @@ xiofile_t *socat_open(const char *addrs0, int dirs, int flags) {
|
||||||
/*pthread_attr_t attr;*/
|
/*pthread_attr_t attr;*/
|
||||||
int _errno = 0;
|
int _errno = 0;
|
||||||
|
|
||||||
|
Info3("opening address \"%s\", dirs=%d, flags=%d", addrs0, dirs, flags);
|
||||||
|
|
||||||
/* loop over retries */
|
/* loop over retries */
|
||||||
while (true) {
|
while (true) {
|
||||||
|
|
||||||
|
@ -531,7 +533,7 @@ xiofile_t *socat_open(const char *addrs0, int dirs, int flags) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (((dirs0+1) & (XIO_WRONLY+1)) || currentisendpoint) {
|
if ((true || ((dirs0+1) & (XIO_WRONLY+1))) || currentisendpoint) {
|
||||||
if (xioopen_unoverload(sfdA, srchleftA, &isleftA, srchrightA, &isrightA)
|
if (xioopen_unoverload(sfdA, srchleftA, &isleftA, srchrightA, &isrightA)
|
||||||
< 0) {
|
< 0) {
|
||||||
Error1("address \"%s\" can not be used in this context",
|
Error1("address \"%s\" can not be used in this context",
|
||||||
|
@ -1118,6 +1120,9 @@ static int
|
||||||
tag = (mayright ? XIOADDR_INTER : XIOADDR_ENDPOINT);
|
tag = (mayright ? XIOADDR_INTER : XIOADDR_ENDPOINT);
|
||||||
|
|
||||||
/* look for a matching entry in the list of address descriptions */
|
/* look for a matching entry in the list of address descriptions */
|
||||||
|
Debug5("searching record for \"%s\" with tag=%d, numparams=%d, leftdirs %d, rightdirs %d",
|
||||||
|
addrdescs[0]->common_desc.defname,
|
||||||
|
tag, sfd->argc-1, mayleft, mayright);
|
||||||
while ((*addrdescs) != NULL) {
|
while ((*addrdescs) != NULL) {
|
||||||
if ((*addrdescs)->tag == tag &&
|
if ((*addrdescs)->tag == tag &&
|
||||||
addrdescs[0]->common_desc.numparams == sfd->argc-1 &&
|
addrdescs[0]->common_desc.numparams == sfd->argc-1 &&
|
||||||
|
|
Loading…
Reference in a new issue