From mboxrd@z Thu Jan 1 00:00:00 1970 From: f6bvp Subject: RE: 300bps soundmodem notes and Broken Pipe Date: Thu, 09 Dec 2010 21:14:39 +0100 Message-ID: <4D0138AF.5060008@free.fr> Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Return-path: Sender: linux-hams-owner@vger.kernel.org List-ID: Content-Type: text/plain; charset="us-ascii"; format="flowed" To: oakie@kamakuranet.ne.jp, linux-hams Cc: Bernard Pidoux Hi, A SIGPIPE signal is generated by Linux kernel when a frame cannot be sent to destination for the connexion has timed out (broken or closed). This signal is received by the program, here xmodem. If the program does not handle this signal it may fall down. This is why there is a possibility to declare that a specific signal, say SIGPIPE, must be ignored. This is the purpose of line signal (SIGPIPE, SIG_IGN); that you may include at the beginning of the main program in the file containing main() Look at the beginning of the file and localize a number of #include lines like : #include You should add there the following line : #include Then, you should add the signal line at the beginning of the main program somewhere after variable declarations. For example : main(int argc, char *argv[]) { in c; char *tab; signal (SIGPIPE, SIG_IGN); ... If you want you can send me privately a copy of the first 50 lines of main() function code. I will help you doing the patch. After saving the file you can compile xmodem and tell us if it works. 73 de Bernard, f6bvp -----Original Message----- Hello Bernard, Thank you for picking up my question about "Broken pipe" issue and sending your suggestion. Please be patient for a while as I am not any computer language programmer at all. I read the source file of soundmodem and I believe the error message comes from the second logprintf statement (line 368) in alsaio.c program. ---------------------------alsaio.c-------------------------------- static inline void iotxstart(struct audioio_unix *audioio) { int err; if (snd_pcm_prepare(audioio->playback_handle) < 0) { logprintf(MLOG_ERROR, "Error preparing tx.\n"); } err = snd_pcm_start(audioio->playback_handle); if (err < 0) logprintf(MLOG_ERROR, "snd_pcm_start in iotxstart: %s", snd_strerror(err)); } ------------------------------------------------------------------- Can you explain me the following questions concerning your suggestion? 1. Are you suggesting adding additional three lines in alsaio.c program? If yes, which exact lines should I add? 2. What is the purpose and expected result of signal (SIGPIPE, SIG_IGN) addition? I am waiting your response soon. Regards, take