[ERROR:Resource temporarily unavailable!] Serial writing by termios library


 
Thread Tools Search this Thread
Top Forums Programming [ERROR:Resource temporarily unavailable!] Serial writing by termios library
# 1  
Old 10-23-2012
[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
# 2  
Old 10-23-2012
It's connected to a modem that's already connected to a static IP? Is this a SLIP setup? Is the port already grabbed by the driver? You may need to communicate over the network, not over the raw port.
# 3  
Old 10-23-2012
i write At command on serial port for connect modem at server!
# 4  
Old 10-23-2012
I still suspect there's something wrong with how you're using the port.

I wrote an example program to use termios in Linux, see tcgets.c and tcgets.h
# 5  
Old 10-24-2012
Quote:
Originally Posted by Corona688
I still suspect there's something wrong with how you're using the port.

I wrote an example program to use termios in Linux, see tcgets.c and tcgets.h
why? it work correctly.. is a problem with FIFO memory...
# 6  
Old 10-24-2012
EAGAIN is returned by a write on a blocked socket that opened non-blocking.

This means you are trying to write to a socket that cannot take more data right now.

So, in light of what we are saying what do you think?
# 7  
Old 10-24-2012
Quote:
Originally Posted by enaud
why? it work correctly..
Obviously not, or you wouldn't have made this thread...

Have you tried my code?
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Fork: Resource temporarily unavailable

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)
Discussion started by: clx
15 Replies

2. Programming

Serial programming using termios

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)
Discussion started by: turner
3 Replies

3. UNIX for Dummies Questions & Answers

Fork resource unavailable error, max # filehandles open?

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)
Discussion started by: aquinom85
6 Replies

4. UNIX for Dummies Questions & Answers

Fork: Resource Temporarily Unavailable

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)
Discussion started by: monstrousturtle
3 Replies

5. UNIX for Advanced & Expert Users

fork: Resource temporarily unavailable , server unexpectedly unavailable network connection

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)
Discussion started by: taherahmed
1 Replies

6. Red Hat

cannot set user id: Resource temporarily unavailable (not open file/open process related)

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)
Discussion started by: Katahdin
0 Replies

7. UNIX for Dummies Questions & Answers

Resource temporarily unavailable Error In Socket

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)
Discussion started by: kavinsivakumar
1 Replies

8. Solaris

Unix file temporarily unavailable

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)
Discussion started by: dr. phreeze
9 Replies

9. Solaris

fork: Resource temporarily unavailable - What can I check ?

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)
Discussion started by: unclefab
5 Replies

10. Solaris

sendto failing "resource temporarily unavailable"

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)
Discussion started by: Naanu
6 Replies
Login or Register to Ask a Question