1. Си / Говнокод #14236

    +141

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    if (connfailed) {
    			KSOCKET_CALLBACK(so, disconnected, error);
    		} else {
    			KSOCKET_CALLBACK(so, connectfailed, error);
    		}

    https://github.com/joyent/illumos-joyent/blob/master/usr/src/uts/common/fs/sockfs/socknotify.c

    Запостил: myaut, 17 Декабря 2013

    Комментарии (8) RSS

    • Где говно? не все считают код типа
      KSOCKET_CALLBACK(so, connfailed?disconnected:connectfailed, error);

      или
      handle status =  connfailed?disconnected:connectfailed;
      KSOCKET_CALLBACK(so,status, error);

      Хорошей практикой.
      Ответить
      • показать все, что скрытоГовно в том, что при ситуации connection failed мы дергаем вызов "disconnect", а при дисконнекте - наоборот "connectfailed".
        Ответить
        • Т.е. все наоборот? :)

          P.S. А может быть там олдскульный бул в connfailed: 0 - все ок, 1 и выше - фейл?

          P.P.S. Сорри, рука дрогнула, поставил минус вместо плюса.
          Ответить
          • А не, походу косяк именно в именовании переменных.
            В Illumos передается условный true в параметре connfailed, если разорвалось уже установленное соединение - все логично.
            В Solaris (тыренных исходниках) исправили логику, и переменная connfailed стала правильной. И порядок условий поменяли. Даже коммент написали для будущих поколений:
            /* SS_ISCONNECTED not being set indicates a failure to connect() */
            	connect_failed = !(so->so_state & SS_ISCONNECTED);
            ...
            	so_notify_disconnected(so, connect_failed, error);
            
            ...
                
            void
            so_notify_disconnected(struct sonode *so, boolean_t connfailed, int error)
            {
            ...
            	if (IS_KERNEL_SOCKET(so)) {
            		if (connfailed) {
            			KSOCKET_CALLBACK(so, connectfailed, error);
            		} else {
            			KSOCKET_CALLBACK(so, disconnected, error);
            		}
            ...
            Ответить
          • молодой линуксоид заигрался и конвертнул все и сразу? 1 на 0, 0 на 1, discon на con, жабу на сишарп...
            Ответить
            • "молодой линуксоид конвертнул жабу на сишарп" - какой-то жёлтый заголовок.

              В рамках дипломной работы молодой линуксоид Сидоров А. И. конвертнул жабу на сишарп под руководством кандидата физико-математических наук Бабушкина и доктора Попова.
              Ответить
              • раз есть доктор попов то должны быть огурец и силы земли
                Ответить
              • >молодой линуксоид Сидоров
                мистеров
                Ответить

    Добавить комментарий