Hi Andreas,

thank you for answer. you are right about my mistake - getsockopt says MTU is 16 bytes, so no "Invalid argument" any more. but I still have a problem with transmission - send() sends only 437 MTU blocks and then stops with "Resource temporarily unavailable". I tried to wait with "select()" for proper time slot, but it never arrives after first 437 blocks. have no idea how to solve it...

Best Regards,
kern.


Andreas Kemnade wrote:
On Fri, 27 Jul 2007 11:55:29 +0400
Irakli Tsagareli <itsagareli@yandex.ru> wrote:

  
Hi all,
 
I'm writing a small code to test HandsFree capabilities between my phone and PC. everything works fine for audio playback (on the PC, I can hear sound file played on the phone and in case of incoming call, I can hear a voice of remote subscriber) but when I try at the same time to send some audio data to the handset via same socket, send() function returns "Invalid argument" error. I tried to create new socket for writing (same way I created listening socket). creation succeeds, but connect fails with "Device or resource busy". can anybody be so kind and explain, how can I read and write data through SCO channel simultaneously ?
    
 
[...]
  
            read(snd_fd, buffer, 48);
            if(send(cli_scosock, buffer, 48, 0) < 0)             << --- send() fails here with "Invalid argument"
            {
                perror("send failed");
            }
    
I remember having trouble with sco and hardcoded packet sizes (try 64). sometimes it's 64
and sometimes 48 if I remember correctly.

yout should do 
  struct sco_options opts;
  int size=sizeof(opts);
  getsockopt(cli_scosock,SOL_SCO,SCO_OPTIONS,&opts,&size);
once somewhere and then use opts.mtu

Greetings
Andreas Kemnade