If you are using unix socket, you could use socat to see what's going on
there. It might require little setting up though.

Aki


On 08.09.2017 10:16, Steffan Cline wrote:
> I'm not the originator. I'm just trying to do some maintenance on the code to 
> make it work for CentOS 7. 
>
> I'll check out those two. 
>
> Any ideas on how to check exactly what's sent via the socket? If the EOF is 
> sent, I know to dig further into the daemon code. 
>
>
> Thanks,
> Steffan Cline
> stef...@hldns.com
> 602-793-0014
>
>> On Sep 7, 2017, at 11:43 PM, Aki Tuomi <aki.tu...@dovecot.fi> wrote:
>>
>> Hi!
>>
>> Nice to hear you are developing this, I'll add it to our wiki if it's
>> not there.
>>
>> Please don't use net_transmit, it's going away. You should use ostream
>> and istream instead.
>>
>> Aki
>>
>>
>>> On 08.09.2017 09:29, Steffan Cline wrote:
>>> I’m working on an OS project from github. There are two parts:
>>>
>>> Dovecot plugin - https://github.com/st3fan/dovecot-xaps-plugin
>>>
>>> Daemon written in Go - https://github.com/st3fan/dovecot-xaps-daemon
>>>
>>>
>>>
>>> # dovecot --version
>>>
>>> 2.2.10
>>>
>>>
>>>
>>> Both parts worked fine on CentOS 6 but I recently rebuilt them both for 
>>> CentOS 7 and have run into some errors.
>>>
>>>
>>>
>>> The plugin sends a notification over a socket to the daemon. The daemon 
>>> then processes the request and returns a message to the plugin.
>>>
>>>
>>>
>>> The plugin reads the response then closes the socket and at that point, I’m 
>>> running into an issue. 
>>>
>>>
>>>
>>> The daemon reports the following: read unix /tmp/xapsd.sock->@: read: 
>>> connection reset by peer
>>>
>>>
>>>
>>> In reading the Go language docs, it says that it will throw the first error 
>>> it hits before the EOF from the socket. This led me to think that perhaps 
>>> the plugin was not sending an EOF when closing the socket.
>>>
>>>
>>>
>>> I tried to write an EOF to the socket before the close but no change. 
>>> Everything works between the plugin and daemon right up until the socket 
>>> close.
>>>
>>>
>>>
>>> Is there a way to monitor the stream through the socket so I can see if the 
>>> plugin is indeed sending the EOF? Knowing that lets me know if I need to 
>>> chase down the issue in the Go daemon code.
>>>
>>>
>>>
>>> I’m no pro with C but I tried. The snippet from the plugin follows:
>>>
>>>
>>>
>>> alarm(1);                  
>>>
>>> {
>>>
>>> if (net_transmit(fd, str_data(req), str_len(req)) < 0) {
>>>
>>>  i_error("write(%s) failed: %m", socket_path);
>>>
>>>  ret = -1;
>>>
>>> } else {
>>>
>>>  char res[1024];
>>>
>>>  ret = net_receive(fd, res, sizeof(res)-1);
>>>
>>>  if (ret < 0) {
>>>
>>>                i_error("read(%s) failed: %m", socket_path);
>>>
>>>  } else {
>>>
>>>                res[ret] = '\0';
>>>
>>>                if (strncmp(res, "OK ", 3) == 0) {
>>>
>>>                  ret = 0;
>>>
>>>                }
>>>
>>>  }
>>>
>>> }
>>>
>>> }
>>>
>>> alarm(0);
>>>
>>>
>>>
>>> char stx[1];
>>>
>>> stx[0]=(char) 4;
>>>
>>> //stx[1]='\0';
>>>
>>> if ( net_transmit(fd, stx, sizeof(stx) ) < 0 ) {
>>>
>>>  i_error("Error writing EOF");
>>>
>>> }
>>>
>>>
>>>
>>> //string_t *testEOF= t_str_new(2);
>>>
>>> //str_append(testEOF, (char*) 4);
>>>
>>> //if ( net_transmit(fd, str_data(testEOF), str_len(testEOF) ) < 0 ) {
>>>
>>> //      i_error("Error writing EOF");
>>>
>>> //    }
>>>
>>>
>>>
>>> //i_close_fd(&fd);
>>>
>>> net_disconnect(fd);
>>>
>>> fd=-1;
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> Thank you,
>>>
>>> Steffan Cline
>>>
>>> 602-793-0014
>>>
>>>

Reply via email to