[ERROR:Resource temporarily unavailable!] Serial writing by termios library
Hello,
I am using the termios library to write data that I get from a Bluetooth device to a modem via serial.
The data arrive from the Bluetooth device correctly every 50ms and I have to bypass them on the serial ttyUSB3 where it is connected to a modem connected to a socket with static IP.
The writing is successful until I get the following message:
write error 11 Resource temporarily unavailable
I open the door in non-blocking ( OpenPort(0) )mode and the class that I use is as follows:
Code:
#include "cclassseriallib_modem.h"
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <string.h>
#include <errno.h>
cClassSerialLIB_modem::cClassSerialLIB_modem()
{
}
bool cClassSerialLIB_modem::OpenPort(bool bloccante)
{
// make sure port is closed
ClosePort();
fd = open("/dev/ttyUSB3", O_RDWR |
O_NOCTTY | /* tells UNIX that this program doesn't want to be the "controlling terminal" for that port*/
O_NDELAY); /* tells UNIX that this program doesn't care what state the DCD signal line is in */
if (fd < 0)
{
printf("open error %d %s\n", errno, strerror(errno));
return false;
}
else
{
struct termios options;
/* The FNDELAY option causes the read function to return 0 if no
characters are available on the port. To restore normal (blocking) behavior,
call fcntl() without the FNDELAY option: */
if(bloccante)
{
printf("bloccante\n");
fcntl(fd, F_SETFL, 0);
}
else
{
printf("NON bloccante");
fcntl(fd, F_SETFL, FNDELAY);
}
tcgetattr(fd, &options);
//set port speed
cfsetispeed(&options, B115200);
cfsetospeed(&options, B115200);
options.c_cflag |= (CLOCAL | CREAD);
//set 8n1
options.c_cflag &= ~PARENB; /* Enable parity bit */
options.c_cflag &= ~CSTOPB; /* 2 stop bits (1 otherwise) */
options.c_cflag &= ~CSIZE; /* Mask the character size bits */
options.c_cflag |= CS8; /* Select 8 data bits */
/*options.c_cflag &= ~CRTSCTS;
options.c_iflag &= ~IXON; //RIMUOVE X0N/XOFF control
options.c_iflag &= ~IXOFF;
options.c_iflag &= ~IGNCR;
*/
//set raw input
options.c_lflag &= ~(ICANON | /* Enable canonical input (else raw) */
ECHO | /*Enable echoing of input characters */
ECHOE | /*Echo erase character as BS-SP-BS*/
ISIG); /*Enable SIGINTR, SIGSUSP, SIGDSUSP, and SIGQUIT signals*/
tcsetattr(fd, TCSANOW, &options); /*Make changes now without waiting for data to complete*/
}
return true;
}
int cClassSerialLIB_modem::WritePort(QString psOutput)
{
int iOut;
QByteArray ba = psOutput.toLocal8Bit();
if (fd < 1)
{
printf(" port is not open\n");
return -1;
} // end if
iOut = write(fd, ba.data(), strlen(ba.data()));
if (iOut < 0)
{
printf("write error %d %s\n", errno, strerror(errno));
}
else
{
printf("wrote %d chars: %s\n", iOut, ba.data());
} // end if
return iOut;
}
int cClassSerialLIB_modem::ReadPort(QString * Response)
{
int iIn;
char psResponse[254];
if (fd < 1)
{
printf(" port is not open\n");
return -1;
} // end if
iIn = read(fd, psResponse, 254);
if (iIn < 0)
{
if (errno == EAGAIN)
{
return 0; // assume that command generated no response
}
else
{
printf("read error %d %s\n", errno, strerror(errno));
} // end if
}
else
{
psResponse[iIn<254?iIn:254] = '\0';
printf("read %d chars: %s\n", iIn, psResponse);
} // end if
*Response=QString::fromLocal8Bit(psResponse);
return iIn;
}
void cClassSerialLIB_modem::ClosePort()
{
// you may want to restore the saved port attributes
if (fd > 0)
{
close(fd);
} // end if
}
thanks for help.
Last edited by enaud; 10-23-2012 at 07:45 AM..
Reason: quote tags -> code tags
Well, I am not even sure if its failing, cause at the other end I have a select call and it wakes up and reads the data I sent fine.
Ok here is the issue, I have a UDP socket(non blocking) through which I push some data to another port. At the other end I have select loop, waiting for this data.... (6 Replies)
Hi everybody,
I have an Unix box running Solaris and every day for 1 hour or 2 the box is stuck and I can only get this error message when trying to type a command :
bash-3.00$ vmstat 5
bash: fork: Resource temporarily unavailable
How can I trace what's is going wrong with this box ?... (5 Replies)
Morning,
I logged on to my webserver today and checked /var/adm/messages. I just happen to run across this message:
Sep 3 13:15:21 web1 nfs: file temporarily unavailable on the ser
ver, retrying...
Is there a problem with nfs? Are the files locked? (9 Replies)
Hi,
Now I am programming to communicate with some network printer through TCP Socket program.By sending command "\033E 1\r" to printer,causes, check the port for error normally.
In my case i used following code
bytesSent = send( sockfd, "\033E 1\r",sizeof("\033E 1\r"), 0);
... (1 Reply)
First post, sorry to be a bother but this one has been dogging me. I have a process user (java application server) that trips a resource limit every couple weeks and need help finding what limit we're hitting.
First, this is what's running:
This is the error when jobs are run or the... (0 Replies)
Solaris 10 Server refuse to connect :wall:
fork: Resource temporarily unavailable , server unexpectedly unavailable network connection , refuse error, disconnect message, fatal error type2, (protocol error type2)
Issue has been resolved after taken few steps :b:
First of all need to check... (1 Reply)
I wrote a script that works most of the time but gave me
fork: resource temporarily unavailable
some of the time. I restarted my computer and now it runs fine but googling "fork: resource temporarily unavailable" and looking on the forums has not actually helped me figure out what exactly I... (3 Replies)
I wrote a perl program that simultaneously reads in data from 691 tar.gz files using zcat. I can run one instance of the program without any issues and the memory and swap sizes are negligible. However, when I attempt to run more than 1 I start to get fork: resource unavailable messages. Are... (6 Replies)
Hi guys
I'm trying to connect to CISCO router using termios. So I decided to have two threads one for reading data and the other one for writing data.
And here's my code :
int mainfd=0;
char ch = {NULL};
void *write(void *)
{
char temp;
while(1)
{
temp =... (3 Replies)
Hi friends,
Working on a linux X86-64 bit system, I suddenly started getting this error (mentioned in subject) from various scripts.
I googled, found that there are couple of reason which causes this issue.
- less memory
I am pretty sure, memory seems to be stable on my system and at the... (15 Replies)