You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by "Francesco Furfari (JIRA)" <ji...@apache.org> on 2009/07/15 13:47:15 UTC

[jira] Closed: (FELIX-657) Devices get lost after a certain period of time (SSDP sockets do not get closed properly in cyberlink lib)

     [ https://issues.apache.org/jira/browse/FELIX-657?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Francesco Furfari closed FELIX-657.
-----------------------------------

    Resolution: Fixed

Fixed in CyberDomo 1.9 

> Devices get lost after a certain period of time (SSDP sockets do not get closed properly in cyberlink lib)
> ----------------------------------------------------------------------------------------------------------
>
>                 Key: FELIX-657
>                 URL: https://issues.apache.org/jira/browse/FELIX-657
>             Project: Felix
>          Issue Type: Bug
>          Components: UPnP Subproject
>    Affects Versions: upnp-basedriver-0.8.0
>            Reporter: Daniel Felsing
>             Fix For: upnp-basedriver-0.8.0
>
>
> Under Linux Systems every Socket uses a "file descriptor" in the system
> which is in most unix systems default value of 1024 max descriptors.
> Now i tried to push that value to 65535 and vuala everything is running > 8
> hours.
> If i check my open file descriptors with lsof -p pidofmyjavaprogram i see
> now MANY open ports that have not been closed properly (right now > 1400 for
> 10 hours of operation).
> Ok..that made me let a bit deeper into the code of cyberlink library.
> I saw a fix that was introduced by someone because of "non-closed" ssdp udp
> sockets in the announce method of org/cybergarage/upnp/Device.java
> 1240            SSDPNotifySocket ssdpSock = new SSDPNotifySocket(bindAddr);
>  1241 
>  1242           SSDPNotifyRequest ssdpReq = new SSDPNotifyRequest();
>  1243           ssdpReq.setServer(UPnP.getServerName());
>  1244           ssdpReq.setLeaseTime(getLeaseTime());
>  1245           ssdpReq.setLocation(devLocation);
>  1246           ssdpReq.setNTS(NTS.ALIVE);
>  1247 
>  1248           // uuid:device-UUID(::upnp:rootdevice)*
>  1249           if (isRootDevice() == true) {
>  1250                   String devNT = getNotifyDeviceNT();
>  1251                   String devUSN = getNotifyDeviceUSN();
>  1252                   ssdpReq.setNT(devNT);
>  1253                   ssdpReq.setUSN(devUSN);
>  1254                   ssdpSock.post(ssdpReq);
>  1255 
>  1256                   String devUDN = getUDN();
>  1257                   ssdpReq.setNT(devUDN);
>  1258                   ssdpReq.setUSN(devUDN);
>  1259                   ssdpSock.post(ssdpReq);
>  1260           }
>  1261 
>  1262           //
> uuid:device-UUID::urn:schemas-upnp-org:device:deviceType:v
>  1263           String devNT = getNotifyDeviceTypeNT();
>  1264           String devUSN = getNotifyDeviceTypeUSN();
>  1265           ssdpReq.setNT(devNT);
>  1266           ssdpReq.setUSN(devUSN);
>  1267           ssdpSock.post(ssdpReq);
>  1268 
>  1269           // Thanks for Mikael Hakman (04/25/05)
>  1270           ssdpSock.close();
> Ok seems fine so far...
> Ok now i looked into org/cybergarage/upnp/Service.java and there the "socket
> close fix" was NOT introduced for both announce and byebye.....
>   599   public void announce(String bindAddr)
>   600   {
>   601           //
> uuid:device-UUID::urn:schemas-upnp-org:service:serviceType:v
>   602           Device rootDev = getRootDevice();
>   603           String devLocation = rootDev.getLocationURL(bindAddr);
>   604           String serviceNT = getNotifyServiceTypeNT();
>   605           String serviceUSN = getNotifyServiceTypeUSN();
>   606 
>   607           Device dev = getDevice();
>   608 
>   609           SSDPNotifyRequest ssdpReq = new SSDPNotifyRequest();
>   610           ssdpReq.setServer(UPnP.getServerName());
>   611           ssdpReq.setLeaseTime(dev.getLeaseTime());
>   612           ssdpReq.setLocation(devLocation);
>   613           ssdpReq.setNTS(NTS.ALIVE);
>   614           ssdpReq.setNT(serviceNT);
>   615           ssdpReq.setUSN(serviceUSN);
>   616 
>   617           SSDPNotifySocket ssdpSock = new SSDPNotifySocket(bindAddr);
>   618           Device.notifyWait();
>   619           ssdpSock.post(ssdpReq);
>                     // PLACE FIX HERE (by Daniel)
>                    ssdpSock.close();
>   620   }
>   622   public void byebye(String bindAddr)
>   623   {
>   624           //
> uuid:device-UUID::urn:schemas-upnp-org:service:serviceType:v
>   625 
>   626           String devNT = getNotifyServiceTypeNT();
>   627           String devUSN = getNotifyServiceTypeUSN();
>   628 
>   629           SSDPNotifyRequest ssdpReq = new SSDPNotifyRequest();
>   630           ssdpReq.setNTS(NTS.BYEBYE);
>   631           ssdpReq.setNT(devNT);
>   632           ssdpReq.setUSN(devUSN);
>   633 
>   634           SSDPNotifySocket ssdpSock = new SSDPNotifySocket(bindAddr);
>   635           Device.notifyWait();
>   636           ssdpSock.post(ssdpReq);
>                     // PLACE FIX HERE (by Daniel)
>                    ssdpSock.close();
>   637   }
> kind regards,
> Daniel

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.